좋아 사람들이, 내가 완전하게, 때로는이 오류 메시지 뒤에 보안상의 이유를 이해하지만 우리 해결 방법이 필요합니다 ... 여기에 제 것이 있습니다. ASP.Net (이 질문에 기초한 JavaScript가 아닌)을 사용하지만, 누군가에게 유용 할 수 있기를 바랍니다.
Google의 사내 앱에는 사용자가 네트워크 전체에 퍼져있는 유용한 파일에 대한 바로 가기 목록을 만들 수있는 웹 페이지가 있습니다. 이 바로 가기 중 하나를 클릭하면 이러한 파일을 열려고합니다 ... 물론 Chrome의 오류로 인해 이러한 문제가 발생하지 않습니다.

이 웹 페이지는 다양한 단축키를 나열하는 AngularJS와 1.x에서 사용합니다.
원래 내 웹 페이지는 파일을 가리키는 <a href..>
요소를 직접 만들려고했지만이 링크 중 하나를 클릭하면 "Not allowed to load local resource
"오류가 발생합니다.
<div ng-repeat='sc in listOfShortcuts' id="{{sc.ShtCut_ID}}" class="cssOneShortcutRecord" >
<div class="cssShortcutIcon">
<img ng-src="{{ GetIconName(sc.ShtCut_PathFilename); }}">
</div>
<div class="cssShortcutName">
<a ng-href="{{ sc.ShtCut_PathFilename }}" ng-attr-title="{{sc.ShtCut_Tooltip}}" target="_blank" >{{ sc.ShtCut_Name }}</a>
</div>
</div>
용액 ... 함수 자체가 매우 간단 ... 내 각도 컨트롤러 함수를 호출하는 코드로
<div ng-click="OpenAnExternalFile(sc.ShtCut_PathFilename);" >
{{ sc.ShtCut_Name }}
</div>
을 그 <a href..>
요소를 대체하는 것이었다
$scope.OpenAnExternalFile = function (filename) {
//
// Open an external file (i.e. a file which ISN'T in our IIS folder)
// To do this, we get an ASP.Net Handler to manually load the file,
// then return it's contents in a Response.
//
var URL = '/Handlers/DownloadExternalFile.ashx?filename=' + encodeURIComponent(filename);
window.open(URL);
}
그리고 내 ASP에서.인터넷 프로젝트,이 코드를 포함 DownloadExternalFile.aspx
라는 핸들러 파일 추가 :
namespace MikesProject.Handlers
{
/// <summary>
/// Summary description for DownloadExternalFile
/// </summary>
public class DownloadExternalFile : IHttpHandler
{
// We can't directly open a network file using Javascript, eg
// window.open("\\SomeNetworkPath\ExcelFile\MikesExcelFile.xls");
//
// Instead, we need to get Javascript to call this groovy helper class which loads such a file, then sends it to the stream.
// window.open("/Handlers/DownloadExternalFile.ashx?filename=//SomeNetworkPath/ExcelFile/MikesExcelFile.xls");
//
public void ProcessRequest(HttpContext context)
{
string pathAndFilename = context.Request["filename"]; // eg "\\SomeNetworkPath\ExcelFile\MikesExcelFile.xls"
string filename = System.IO.Path.GetFileName(pathAndFilename); // eg "MikesExcelFile.xls"
context.Response.ClearContent();
WebClient webClient = new WebClient();
using (Stream stream = webClient.OpenRead(pathAndFilename))
{
// Process image...
byte[] data1 = new byte[stream.Length];
stream.Read(data1, 0, data1.Length);
context.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", filename));
context.Response.BinaryWrite(data1);
context.Response.Flush();
context.Response.SuppressContent = true;
context.ApplicationInstance.CompleteRequest();
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
을 그리고 그것 뿐이다.
사용자가 바로 가기 링크 중 하나를 클릭하면 OpenAnExternalFile
함수가 호출되어이 .ashx 파일을 열고 열고 자하는 파일의 경로 + 파일 이름을 전달합니다.
이 처리기 코드는 파일을로드 한 다음 해당 내용을 HTTP 응답으로 다시 전달합니다.
그리고 작업이 완료되면 웹 페이지에서 외부 파일을 엽니 다.
피어! 다시 - 크롬이 "Not allowed to load local resources
"예외를 던져 버리는 이유가 있습니다. 따라서이 코드를주의 깊게 읽으십시오. 그러나이 코드를 게시하면이 제한 사항을 해결하는 데 매우 간단합니다.
그냥 마지막 코멘트 : 원래 질문은 파일 "C:\002.jpg
"을 열려고했습니다. 은 수 없습니다. 귀하의 웹 사이트는 하나의 서버 (자체 C : 드라이브)에 설치되며 사용자의 C : 드라이브에 직접 액세스 할 수 없습니다. 따라서 가장 좋은 방법은 네트워크 드라이브의 어딘가에있는 파일에 액세스하기 위해 광산과 같은 코드를 사용하는 것입니다.
로컬 소스에 액세스하려면' '을 사용하십시오. – dandavis