【问题标题】:Downloading file in node.js into user specified path将 node.js 中的文件下载到用户指定的路径
【发布时间】:2015-08-30 18:13:34
【问题描述】:

我正在尝试使用 node.js 下载文件,这是我的代码:

var file_url = req.body.filename;
var DOWNLOAD_DIR = './downloads/';
var options = {
    host: url.parse(file_url).host,
    port: 80,
    path: url.parse(file_url).pathname
};
var file_name = url.parse(file_url).pathname.split('/').pop();
var file = fs.createWriteStream(DOWNLOAD_DIR + file_name);  
http.get(options, function (resp) {
    resp.on('data', function (data) {
        file.write(data);
    }).on('end', function () {
        file.end();           
        console.log(file_name + ' downloaded to ' + DOWNLOAD_DIR);     


        delet(file_url);     
    });
});  

这里我手动给 DOWNLOAD_DIR,所以它正在下载到那个

目录,因为它是本地主机不是问题,但是当我上传这个时

代码到服务器然后文件应该被下载到那个特定的

用户的机器,那么如何动态地给 DOWNLOAD_DIR 变量路径

【问题讨论】:

  • 您无法控制用户喜欢下载文件的路径。您在服务器上创建 writestream,当然它在本地工作。但用户使用浏览器设置设置路径(例如在 Chrome 中:设置-下载的文件)。

标签: angularjs node.js


【解决方案1】:

如果下载文件夹在主目录中(并且您想在下载文件夹中下载),那么您可以使用

var path = require('path'); 
var file_url = req.body.filename;       
var DOWNLOAD_DIR = path.join(process.env.HOME || process.env.USERPROFILE, 'downloads/');
var file_name = url.parse(file_url).pathname.split('/').pop();
var file_path = path.join(DOWNLOAD_DIR,file_name);
var file = fs.createWriteStream(file_path); 

PS:在处理路径和文件时,始终使用nodejs的path模块生成路径。

【讨论】:

  • 如何显示下载状态。我使用 angular.js 作为前端
  • 你能告诉我你的情况“process.env.HOME || process.env.USERPROFILE”返回的确切路径是什么吗?
  • @PriyankaPawar 您并不完全需要 process.env.HOME 或 process.env.USERPROFILE。您可以手动提供路径。 HOME 和 USERPROFILE 只是环境变量。您可以通过在 linux 上运行“echo $HOME”或在 Windows 上运行“echo %USERPROFILE%”来检查这些变量的值。这些变量通常设置为用户的主路径;如果是 linux,则为“/Users/xyz”,如果是 Windows,则为“C:\Users\xyz”。
  • 是的,这些变量在 localhost 上工作正常,但我问的是它从实例返回什么?
  • 它将返回环境变量的值。如果 HOME 和 USERPROFILE 都没有设置为任何值,那么你会得到一个错误;因为您将 undefined 传递给 path.join 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 2021-08-19
  • 2021-05-14
  • 2012-06-06
相关资源
最近更新 更多