2016-03-10 1 views
2

У меня есть запрос POST для PDF документа в APIController, вот код:Открытие PDF с угловым ngResource из запроса пост MVC

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

В папке для скачивания создается хорошо образованный файл PDF 28K.

Но когда я изменил свой запрос на 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, и я получаю плохой файл PDF 1K в папке загрузки.

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

Проблема была с нг-ресурса, который возвращает обещание вместо 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); 
}); 

Спасибо

Смежные вопросы