如何使用文件路径解析查询字符串作为变量之一并使用该文件路径变量下载文件?
我正在使用node.js来创建一个新服务器,我想使用给定URL中的文件路径下载文件。我还想在此查询字符串中传递“action”变量。
例如,它就像“http://hostname:port/?action=download&filepath=c:\ Users \ User \ Desktop \ filename.txt”
我想提取动作和文件路径,并使用它来完成一个任务,如下载文件。我在解压缩文件路径并将其传递给程序时遇到问题。似乎当我使用url.parse()。查询时,它会在我将其打印到控制台日志时删除斜杠。
http.createServer(function (req, res) {
var q = url.parse(req.url, true);
var filename = "." + q.pathname;
fs.readFile(filename, function(err, data) {
if (err) {
res.writeHead(404, {'Content-Type': 'text/html'});
return res.end("404 Not Found");
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end();
});
}).listen(3000, "10.0.0.171");
回答如下:
你的描述有点令人困惑。在URL示例中,您提供绝对路径filepath=c:\Users\User\Desktop\filename.txt
并使用filepath
密钥,而在代码中,您尝试组合相对路径"." + q.pathname
并使用pathname
密钥。您还将url.parse()
返回的值视为查询对象,而它是一个包含查询对象的query
密钥的完整URL对象。
如果你确定路径值是绝对的(顺便说一下,这是一种安全的方法),试试这个:
var filename = q.query.filepath;
如果这不起作用,请尝试至少使用console.log(req.url, q.query.filepath)
进行调试,以确保客户端发送有效的URL。