制作网页,将其模块化组装。我使用节点js,即节点静态服务器。
我需要实现从计算机上下载文件,然后再下载到设备上,以便通过按钮下载文件。
虽然我在尝试从计算机到自己的计算机的过程中需要的路径,但是无论如何都无法解决。已经尝试过各种npm模块。 这是发送代码的html代码和客户端文件:
<form name="upload" method="POST" enctype="multipart/form-data">
<input type="file" id="file" name="file">
<input type="submit" name="submit" value="Обновить">
</form>
fileId = file.name;
var formData = new FormData();
formData.append("file", document.querySelector('input').files[0]);
var xhr = new XMLHttpRequest();
xhr.open("POST", "savesettings", true);
xhr.setRequestHeader('X-File-Id', fileId);
xhr.addEventListener("load", function() {
console.log("Done:", xhr.status);
});
xhr.send(formData);
这是应该接受请求并将文件保存到所需目录的脚本,在我看来这是主要问题:
if (req.url == '/savesettings' && req.method == 'POST') {
let fileId = req.headers['x-file-id'];
let filePath = path.join('/home/alexandr/alexandr/web-cfg/uploads', fileId);
if (!uploads[fileId]) uploads[fileId] = {};
let upload = uploads[fileId];
let fileStream;
upload.bytesReceived = 0;
fileStream = fs.createWriteStream(filePath, {
flags: 'w'
});
console.log("fileStream1:", fileStream);
req.on('data', function(data) {
console.log("data:", data.length);
upload.bytesReceived += data.length;
console.log("bytes received", upload.bytesReceived);
});
req.pipe(fileStream);
console.log("req.pipe:", req.pipe(fileStream));
console.log("123", req.data);
fileStream.on('close', function() {
if (upload.bytesReceived <= 50000) {
debug("Upload finished");
delete uploads[fileId];
res.end("Success " + upload.bytesReceived);
} else {
debug("File unfinished, stopped at " + upload.bytesReceived);
res.end();
}
});
fileStream.on('error', function(err) {
debug("fileStream error");
res.writeHead(500, "File error");
res.end();
});
}
答案 0 :(得分:0)
根据我对HTML的了解,我会说它主要在HTML中而不是服务器中。如果您可以通过在URL中的域后键入文件的路径来访问文件,那么您应该可以通过网站进行访问。
一个简单的HTML示例如下所示:
<a href="path/to/file.js" download>
然后可以使用CSS设置链接的样式,以使其具有您想要的外观。