从跨域打开PDF文件

时间:2016-08-10 12:46:48

标签: javascript c# asp.net-mvc pdf

我想在java脚本的浏览器的新窗口中打开PDF文件。

但我无法使用window.open,因为该文件位于跨域。 我试过通过process.Start()函数通过控制器来做,没有发生任何事情

 var p = new Process();
     p.StartInfo = new ProcessStartInfo(url);
     p.StartInfo.WorkingDirectory = Path.GetDirectoryName(url);
     p.Start();

(因为我的Chrome版本?) 有没有人对我有好主意? 非常感谢!

3 个答案:

答案 0 :(得分:0)

如果您想通过JavaScript执行此操作,只需添加HttpHandler或简单WebForm,即可使用HttpClient获取跨域PDF文件,并使用以下内容编写文件内容Response.WriteFile()方法。 并从JavaScript或使用Anchor标记添加对httphandlerwebform页面的调用。

答案 1 :(得分:0)

如果您将文件放在程序目录上,那么您可以使用此代码

string path = AppDomain.CurrentDomain.BaseDirectory.ToString() + "YourPDF";

然后你做这个

var p = new Process();
        p.StartInfo = new ProcessStartInfo(path);
        p.StartInfo.WorkingDirectory = Path.GetDirectoryName(path);
        p.Start();

答案 2 :(得分:0)

我这样做了: 我使用了Pekita的想法(把文件放在我的程序目录中),然后我可以使用window.open(),关闭窗口后 - 我可以从我的位置删除这个文件。我的Api控制器:

 public string Get(string url,string fileNumber)
    {
        var urlInCurrDomain = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Documents", Path.GetFileNameWithoutExtension(url) +"-" + fileNumber + Path.GetExtension(url));
        if (File.Exists(urlInCurrDomain))
        {
            urlInCurrDomain = TomerUtils.AddSuffix(urlInCurrDomain, 1);
        }

        File.Copy(url, urlInCurrDomain);
        return Path.GetFileName(urlInCurrDomain);

    }

    public void Delete(string fileName)
    {
        var path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Documents", fileName);
        if (File.Exists(path))
            File.Delete(path);
    }

我的java脚本代码:

function copyFileToDomain(url) {

$.ajax({
    type: "Get",
    url: "/Tomer/api/Mismachimapi?url=" + url + "&fileNumber=" + fileCounter,
    xhrFields: { withCredentials: true },
    crossDomain: true,
    success: function (fileName) {
        showFileWindow(fileName);
    },
    error: function (xhr, status, error) {
        showError(xhr, error, "err")
    }
});

}  打开窗口:

function showFileWindow(fileName) {
var wnd = window.open("Documents/" + fileName, "_blank", "x=y");
wnd.onbeforeunload = function () {
    deleteFile(fileName);
};

}

删除文件:

function deleteFile(fileName) {

$.ajax({
    type: "Delete",
    url: "/Tomer/api/Mismachimapi?fileName=" + fileName,
    xhrFields: { withCredentials: true },
    crossDomain: true,
    error: function (xhr, status, error) {
        showError(xhr, error, "err")
    }
});

}