【发布时间】:2019-09-15 17:09:46
【问题描述】:
说我有这个
<input type="file" id="theFile">我使用
myVar = document.getElementById('theFile').value访问所选文件输出为
console.log(myVar); // C:\fakepath\xxx.txt
然后我做一个简单的 POST,做一个 POST 的方法有很多,但一个基本的 JavaScript 方法是:
var http = new XMLHttpRequest();
http.onreadystatechange = function() {
http.open("POST", "http://localhost:port/upload-test");
http.setRequestHeader('Content-type', 'application/json');
var body = {
file: document.getElementById('theFile').value
}
http.send(JSON.stringify(body));
然后在我的Nodejs Express 服务中我这样做:
app.post('/upload-test', (request, response) => {
console.log(request.body); // { file: 'C:\\fakepath\\xxx.txt' }
});
现在如何将该文件保存到运行服务的电脑上?
我知道其他解决方案,例如https://www.w3schools.com/nodejs/nodejs_uploadfiles.asp,但这需要用户使用<form>,这不是我想要的。我想使用基本的 POST 和 JSON 方法上传文件。
【问题讨论】:
-
你实际上并没有发送文件,只是它的路径,服务器端不能对它做任何事情,因为它无法访问客户端的文件系统。如果您想避免使用表单,可以使用
formData并附加文件,如this answer -
我已经这样做了,但不是您尝试的方式。首先,您需要将客户端文件的内容“读取”到一个 var 中,然后像您所做的那样使用 JSON.stringify。在服务器上,然后使用 fs 包创建一个新的空文件并将文件内容“流式传输”到文件并保存。
-
@ChrisAdams 你能举个例子吗?这种方法是否适用于任何文件类型(不仅仅是
txt)? -
我可以试试,是的,它应该适用于任何文件类型。
标签: node.js