2016-03-10 120 views
2

我有在APIController PDF文档POST请求打开具有角ngResource一个pdf,这里的代码:从MVC 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请求一切工作正常,我可以使用下载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'); 
}); 

问题是什么?

感谢

回答

1

我发现这个问题的解决我的问题:pdf-js-render-pdf-using-an-arraybuffer-or-blob-instead-of-url

的问题是与NG-资源,返回一个承诺,而不是arraybuffer,所以你需要之前转换数据你处理承诺。

以下是更正代码:

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); 
}); 

谢谢