gpt4 book ai didi

javascript - 为什么我的文件不能用 nodejs 下载?

转载 作者:行者123 更新时间:2023-11-29 21:23:22 25 4
gpt4 key购买 nike

我从网页向 nodejs 路由器发送一个 xmlhttprequest,如下所示:

var name = $(this).find('td:eq(0)').html();
var docNum = $('#docNum').val();
//alert("fileName=" + name + "&docNum=" + docNum);
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
isUnique = xhttp.responseText;
if(isUnique == "false"){
alert("ID is not unique please pick another document ID ");
}else{
$("form#docForm").submit();
}
}
};
xhttp.open("POST", "/downloadDocument", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var params = "fileName=" + name + "&docNum=" + docNum;
xhttp.send(params);

这工作正常,请求到达路由器并且路由器能够正确读取两个变量。

这是无法正常工作的路由器代码部分:

router.post("/downloadDocument", function(req, res){
var doc = req.body.docNum;
var fileName = req.body.fileName;
var document = Document.findOne({Name: fileName, Dossier: doc}, function(err, obj){
var path = obj.Name;
console.log(path);
fs.writeFile(obj.Name, obj.File);
res.download("./" + obj.Name);
});
});

它所做的只是将我重定向到上一页,它不下载文件,即使文件存在,我也不知道为什么。

我也试过用

  var filestream = fs.createReadStream(obj.File);
filestream.pipe(res);

代替res.download

这是此请求的控制台输出:

Apples.jpg
POST /downloadDocument 200 4.814 ms - -
POST /dossierEdit 302 12.898 ms - 62 #This part concerns me and redirects me while i do not ask for this page in my code
GET /dossiers 304 20.793 ms - -
GET /public/stylesheets/css/bootstrap.min.css 304 2.737 ms - -
GET /public/stylesheets/css/simple-sidebar.css 304 2.921 ms - -
GET /public/stylesheets/style.css 304 2.327 ms - -
GET /public/stylesheets/css/font-awesome.min.css 404 3.502 ms - 56
GET /public/css/style.css 404 1.097 ms - 33
GET /public/stylesheets/css/font-awesome.min.css 404 0.492 ms - 56
GET /public/css/style.css 404 1.107 ms - 33

澄清一下,我的目标是将文件发送到客户端,而不是保存到服务器。

最佳答案

我认为存在几个问题。

  1. Files cannot be downloaded via an ajax call .
  2. fs.writeFile(obj.Name, obj.File) 调用是异步的,因此即使 (1) 不是问题,文件也可能不是在调用 res.download("./"+ obj.Name) 时出现。请改用 fs.writeFileSync
  3. 您可能会被重定向到上一页,因为 $("form#docForm").submit() 调用发生在 ajax 调用返回时,它会向其他人提交表单页面。

要解决您的问题,请尝试将包含发布数据的实​​际表单提交到“/downloadDocument”端点,而不是执行 ajax 调用。

希望对您有所帮助。

关于javascript - 为什么我的文件不能用 nodejs 下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38095241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com