【问题标题】:Opening a pdf with angular ngResource from an MVC post request从 MVC 发布请求中打开带有角度 ngResource 的 pdf
【发布时间】:2016-06-25 22:57:08
【问题描述】:

我在 APIController 中有一个 PDF 文档的 POST 请求,代码如下:

Generator pdfGenerator = new Generator();         
MemoryStream ms = pdfGenerator.Generate();

var response = new HttpResponseMessage
{
    StatusCode = HttpStatusCode.OK,
    Content = new StreamContent(ms)
};

response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
    FileName = "Tag.pdf"
};
 response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return response;

当我使用 GET 请求将文件发送到 Angular 时,一切正常,我可以使用以下方法下载 pdf:

 $window.open('my_url');

在下载文件夹中创建格式良好的 28K pdf 文件。

但是当我将请求更改为 POST 时,文件格式不正确。

var pdfGetter = $resource('my_url', {}, {            
    sendPDFTag: { method: 'POST', url: 'my_url', responseType: 'arraybuffer' }
});

pdfGetter.sendPDFTag(info, function(data) {
    var file = new Blob([data], { type: 'application/pdf' });
    var fileURL = URL.createObjectURL(file);
    $window.open(fileURL);;
});

我尝试使用 FileSaver.js,但我的下载文件夹中有一个错误的 1K pdf 文件。

pdfGetter.sendPDFTag(info, function(data) {
    var file = new Blob([data], { type: 'application/pdf' });
    saveAs(file, 'Tag.pdf');
});

可能是什么问题?

谢谢

【问题讨论】:

    标签: angularjs asp.net-mvc pdf download ngresource


    【解决方案1】:

    我在这个问题中找到了我的问题的解决方案:pdf-js-render-pdf-using-an-arraybuffer-or-blob-instead-of-url

    问题在于 ng-resource 返回一个 promise 而不是 arraybuffer,因此您需要在处理 promise 之前转换数据。

    以下是更正后的代码:

    var pdfGetter = $resource(myUrl, {}, {
        sendPDFTag: { method: 'POST', url: myUrl + "/getPdfWithPost", responseType: 'arraybuffer', 
            transformResponse: function(data, headersGetter) {
                // Stores the ArrayBuffer object in a property called "data"
                return { data : data };
            }
        }
    });
    
    var pdfGetter = pdfGetter.sendPDFTag(info);
    pdfGetter.$promise.then(function () {
        var data = pdfGetter.data;
        var file = new Blob([data], { type: 'application/pdf' });
        var fileURL = URL.createObjectURL(file);
        $window.open(fileURL);
    });
    

    谢谢

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      相关资源
      最近更新 更多