Javascript URL路径,其中包含一个存在下载问题的Express JS请求参数,而不是相同文本的干净字符串
我有一个应用程序,它使用Express.js为静态页面提供服务,也为一些端点提供服务,这些端点处理压缩/保存用户可以下载的文件 在我的常规JS应用程序中,我调用服务器请求zip存档,并同步等待响应:Javascript URL路径,其中包含一个存在下载问题的Express JS请求参数,而不是相同文本的干净字符串,javascript,node.js,express,window.open,Javascript,Node.js,Express,Window.open,我有一个应用程序,它使用Express.js为静态页面提供服务,也为一些端点提供服务,这些端点处理压缩/保存用户可以下载的文件 在我的常规JS应用程序中,我调用服务器请求zip存档,并同步等待响应: var params = { "save_id": saveID // "test" } var paramsString = jQuery.param(params) var xhttp = new XMLHttpRequest() xhttp.open("POST", "finali
var params = {
"save_id": saveID // "test"
}
var paramsString = jQuery.param(params)
var xhttp = new XMLHttpRequest()
xhttp.open("POST", "finaliseSave?" + paramsString, false);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send();
var archivePath = xhttp.response
然后我下载文件:
window.open(archivePath)
在服务器端,如下所示:
app.post("/finaliseSave", function(request, response) {
var saveID = request.query["save_id"] // "test"
//... prepare the file for the user to download ...
//Download path to give to the user
var downloadPath = "./tmp/" + saveID + ".zip" // "./tmp/test.zip"
console.log(downloadPath) // "./tmp/test.zip"
//Return the download path
response.end(downloadPath);
})
我可以转到我的/public/tmp/
目录中的文件,看到文件大小为1.1mb——我甚至可以将其复制到我的下载文件夹,解压缩并获取内容
但是,使用window.open()
行下载的文件要小得多-808kb-当我尝试解压缩它时,我得到一个错误“无法展开(没有这样的文件或目录)”
因此,如果我在服务器上替换此行:
var downloadPath = "./tmp/" + saveID + ".zip" // "./tmp/test.zip"
为此:
var downloadPath = "./tmp/" + "test" + ".zip" // "./tmp/test.zip"
(我也可以将其添加到另一个变量名下,然后在console.log和原始下载路径之间进行相等检查,它告诉我它们相等。)
然后我返回这个downloadPath
,并调用window.open()
,它会正确下载文件,并正确解压
这两者似乎有些不同:
var saveID = request.query["save_id"] // "test"
var saveID = "test" // "test"
不知何故,这会影响文件的下载,我不知道为什么