繁体   English   中英

如何将文件和属性发送到ASP.NET MVC中的控制器,并以二进制形式接收动态生成的PDF作为响应?

[英]How to send files and attributes to controller in ASP.NET MVC and receive a dynamically generated PDF as Binary as response?

我现在正面临着这一斗争,而我真的无法解决这个问题。

我必须调用一个接收两个图片和3个字符串作为参数的操作,此函数将使用itextsharp生成pdf,将其保存在服务器中,然后将二进制数组返回为

返回文件(字节,“ application / pdf”,“ mobile.pdf”);

我试图使用ajax来接收二进制文件,如下所示:

  $.ajax({ url: "/Home/PDF", type: "POST", dataType: 'json', data: { Id : $("#ID").val(), String : $("#String").html(), Type: type, Image: Item, Image2: Item2, }, success: function (data) { if(data != null) { //Something } }, }); 

照原样,我可以看到我已经通过“网络”标签接收到了二进制信息,但是我不知道如何以PDF格式向用户显示二进制信息,我尝试成功的任何事情最终都不会发生,或者我会收到内部服务器错误。

我需要传递的图像和参数是在视图中动态生成的

控制器上的操作可以大致概括如下:

public ActionResult PDF(string Id, string String, string Type, string Image, string Image2)
{

System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
//Code...

byte[] bytes = memoryStream.ToArray();

return File(bytes, "application/pdf", "mobile.pdf");
}

任何帮助将不胜感激。 多谢你们。

如果您以表单提交的形式发送此请求,则浏览器应正确下载pdf文件。 对于ajax请求,这是不可能的。 这是您可以使用的辅助功能。

function sendFormRequest(url, nameValuePairs) {
    var form = document.createElement('form');
    form.method = 'POST';
    form.action = url;
    for (var v in nameValuePairs) {
        var input = document.createElement('input');
        input.name = v;
        input.value = nameValuePairs[v];
        form.appendChild(input);
    }
    document.body.appendChild(form);
    form.submit();
}

您可以这样使用它:

sendFormRequest("/Home/PDF", {
    Id : $("#ID").val(),
    String : $("#String").html(),
    Type: type,
    Image: Item,
    Image2: Item2,
});

Anthony是正确的,主要出于安全方面的考虑,JavaScript几乎缺乏从浏览器本地保存文件的功能。

最简单的选择是已经建议的普通表单提交。 但是,如果您希望通过ajax进行上传以获取异步用户体验,则可以在服务器上生成并保留文件。 然后,您可以返回唯一标识符(例如guid)作为ajax响应。 然后,代码可以将窗口重定向到新的控制器操作,该操作采用唯一的ID,并将预先生成的文件作为文件流返回。 然后,浏览器将正常下载文件。

与此有关的两个问题是确保文件的安全性,以便恶意用户在破解文件ID之前不会发送垃圾邮件。 并定期清理服务器上生成的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM