Pra*_*gha 0 javascript pdf ember.js
目标:想要通过生成以下URL从服务器下载PDF文件: http:// localhost:4200/bookStore/secured/rest/books/14119
当在路线中的book.js中执行以下行时,将生成URL.
return this.store.findRecord('book', bookId);
Run Code Online (Sandbox Code Playgroud)
但我得到403禁止错误.错误详情:
Error: Ember Data Request GET /bookStore/secured/rest/books/14119 returned a 403
Payload (Empty Content-Type)
Forbidden
at new AdapterError (-private.js:3170)
at Class.handleResponse (rest.js:594)
at ajaxError (rest.js:956)
at Class.hash.error (rest.js:623)
at fire (jquery.js:3317)
at Object.fireWith [as rejectWith] (jquery.js:3447)
at done (jquery.js:9274)
at XMLHttpRequest.<anonymous> (jquery.js:9514)
Run Code Online (Sandbox Code Playgroud)
我是否需要将内容类型设置为"application/pdf"?如果是,那么请建议如何设置它.
以下是JS代码:
路线\ book.js
actions: {
pdfClick(bookId) {
return this.store.findRecord('book', bookId);
}
}
Run Code Online (Sandbox Code Playgroud)
模板\ book.hbs
<button {{action "pdfClick" book.bookId}}>PDF</button>
Run Code Online (Sandbox Code Playgroud)
在服务器端,接收和响应请求的代码如下:
@GET
@Path("/{bookId}")
@Produces("application/pdf")
public Response bookExport(@PathParam("bookId") long bookId) {
//Code
}
Run Code Online (Sandbox Code Playgroud)
根据服务器端代码,我们从服务器获取PDF文件.使用PostMan成功测试了这一点.
看起来您正在尝试使用Ember Data下载PDF文件.Ember Data主要用于处理JSON数据,因此在这种情况下这可能不是最合适的.您仍然可以继续使用Ember Data,但是为了下载PDF,我建议您仅使用它来生成正确的URL.
您应该能够像这样大致生成URL:
let url = this.store.adapterFor('book').urlForFindRecord(bookId, 'book');
Run Code Online (Sandbox Code Playgroud)
要不就:
let url = `http://localhost:4200/bookStore/secured/rest/books/${bookId}`;
Run Code Online (Sandbox Code Playgroud)
如果您根本不想使用Ember Data.
最后下载您可以使用的PDF:
document.location.assign(url);
Run Code Online (Sandbox Code Playgroud)
或将您的按钮转换为链接:
<a href={{url}}>Download PDF</a>
Run Code Online (Sandbox Code Playgroud)