通过 JQuery AJAX 调用保存文件
Save File through JQuery AJAX Call
我正在使用 JQuery 向节点服务器发送 AJAX 请求(使用 Hapi)。服务器正确响应 PDF 文件,但我试图在本地保存文件。要注意的是,如果 POST 发送了正确的数据,PDF 应该只 return。换句话说,它是 "protected",我不想公开它。
前端代码:
$.get('http://localhost:3000').done(function (data) {
console.log(data);
});
后端代码:
server.route({
method: 'GET',
path: '/',
handler: async (request, h) => {
return h.file('./static/sample.pdf', {
mode: 'attachment',
filename: 'sample.pdf'
})
}
});
我收到了数据,但前端没有任何反应 UI。如何下载自动发送的PDF?
您可以通过 html5 使用
实现
<a href="http://link/to/file" download="FileName">Download it!</a>
请注意,这仅适用于 same-origin URL,或 blob: 和 data: 方案。这会被来自服务器的 Content-Disposition header 覆盖。
如果您想以编程方式执行此操作,您可以这样做
const element = document.createElement("a")
element.setAttribute(
"href",
// you could also use base64 encoding here like data:application/pdf;base64,
"data:text/plain;charset=utf-8," + encodeURIComponent('pdf binary content here')
)
element.setAttribute("download", "file.pdf")
element.style.display = "none"
document.body.appendChild(element)
element.click()
document.body.removeChild(element)
无论如何,这只是一个有用的方法,如果你想 create/modify 从客户端下载数据,但如果你是从服务器端获取它,那么它更好只是为了打开一个新的 url,让浏览器处理它。
我正在使用 JQuery 向节点服务器发送 AJAX 请求(使用 Hapi)。服务器正确响应 PDF 文件,但我试图在本地保存文件。要注意的是,如果 POST 发送了正确的数据,PDF 应该只 return。换句话说,它是 "protected",我不想公开它。
前端代码:
$.get('http://localhost:3000').done(function (data) {
console.log(data);
});
后端代码:
server.route({
method: 'GET',
path: '/',
handler: async (request, h) => {
return h.file('./static/sample.pdf', {
mode: 'attachment',
filename: 'sample.pdf'
})
}
});
我收到了数据,但前端没有任何反应 UI。如何下载自动发送的PDF?
您可以通过 html5 使用
实现<a href="http://link/to/file" download="FileName">Download it!</a>
请注意,这仅适用于 same-origin URL,或 blob: 和 data: 方案。这会被来自服务器的 Content-Disposition header 覆盖。
如果您想以编程方式执行此操作,您可以这样做
const element = document.createElement("a")
element.setAttribute(
"href",
// you could also use base64 encoding here like data:application/pdf;base64,
"data:text/plain;charset=utf-8," + encodeURIComponent('pdf binary content here')
)
element.setAttribute("download", "file.pdf")
element.style.display = "none"
document.body.appendChild(element)
element.click()
document.body.removeChild(element)
无论如何,这只是一个有用的方法,如果你想 create/modify 从客户端下载数据,但如果你是从服务器端获取它,那么它更好只是为了打开一个新的 url,让浏览器处理它。