我正在将数据发送到我的服务器,该服务器根据请求创建一个 pdf 文件,该文件创建得很好,但我无法将文件发送回客户端。我正在使用 React 来提交表单
handleSubmit(event) {
event.preventDefault();
var body = {
id: this.state.id,
text: this.state.text
}
fetch('http://localhost:5000/pdf', {
method: 'POST',
body: JSON.stringify(body),
headers: {
'Content-Type': 'application/json'
},
}).then(function(file) {
window.open(file.url);
});
}
它的开幕http://localhost:5000/pdf,但由于我没有 GET 路线,因此无法下载任何内容。这是我的 POST 路线
router.post('/pdf', async function(req, res) {
var makePdf = require('./file-create/pdf.js');
makePdf(req, res);
});
文件返回为pdfDoc.pipe(res);
我不能只使用 GET 路由,因为我无法以这种方式发送数据,我怎样才能将此文件发送到客户端?
当您使用时,您正在调用 GET 请求window.open
。这将在带有 URL 的新选项卡中打开该 URL。当您将其从 GET 更改为 POST 时,此操作将不起作用。
要解决这个问题,您可以使用downloadjs
(https://www.npmjs.com/package/downloadjs)以允许您下载从服务器返回的 blob。
我在下面包含了一些示例代码。这包括带有获取请求的index.html 文件和用于返回简单pdf 的server.js。
索引.html
var body = {
id: 1,
text: 'hello world',
};
fetch('/download', {
method: 'POST',
body: JSON.stringify(body),
headers: {
'Content-Type': 'application/json'
},
}).then(function(resp) {
return resp.blob();
}).then(function(blob) {
return download(blob, "CUSTOM_NAME.pdf");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/downloadjs/1.4.8/download.min.js"></script>
服务器.js
var express = require('express');
var app = express();
app.post('/download', function(req, res){
res.download('./make-file/whatever.pdf');
});
app.listen(3000);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)