首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Expressjs文件下载-不是下载

Expressjs文件下载-不是下载
EN

Stack Overflow用户
提问于 2014-08-26 17:55:52
回答 2查看 3.3K关注 0票数 0

我似乎不能让我的“下载文件”功能使用Expressjs。

代码语言:javascript
复制
//DOWNLOAD FILE
router.get('/snippets/download', function (req, res) {
  res.attachment("untitled.js");
  res.send("here is some javascript");
});

如果我在浏览器中访问此路由,该文件将下载到我的计算机上,但如果我使用Angularjs请求访问该路由,则不会。

我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2014-08-26 18:38:49

您可以使用res.download。请参阅此处的文档:http://expressjs.com/4x/api.html

例如:

代码语言:javascript
复制
//DOWNLOAD FILE
router.post('/snippets/download', function (req, res) {
    res.download(req.body.filename, req.body.text);
});

看看这是否有帮助。

票数 1
EN

Stack Overflow用户

发布于 2016-03-22 18:02:53

res.download()方法需要一个文件的完整路径(在使用不同分隔符的windows和linux中可能是不同的)。

Res.download的第二个参数(localName,downloadPromptName )应该能够修改用户看到的文件名(与您服务器目录中的文件不同),但似乎在我的环境中不起作用。

因此,我建议您使用res.sendFile(fullNameInServer,options),您可以在options中修改下载的文件名。

代码语言:javascript
复制
var root = getDownloadRoot(req);
var options =   {
    root: getDownloadRoot(req),
    headers: {
        "content": "text/html;charset=utf-8",
        "Content-Type": "application/octet-stream",
        "Expires":"0",
        "Cache-Control": "must-revalidate, post-check=0, pre-check=0",
        "content-disposition": "attachment;filename=" + urlencode(downloadFilename)
    }
};
res.sendFile( tempFileName ,options);   

文件名的编码应该需要urlencode,然后您可以使用英语以外的文件名。

在调用下载文件之前,您需要将文件物理写入临时文件夹中,getDownloadRoot()方法会在运行时为您提供临时文件夹位置,当您更改路径以运行应用程序时,该位置不会改变。

下面是函数getDownloadRoot()

代码语言:javascript
复制
function getDownloadRoot(req){
    var path = require('path');
    var sep = path.sep;
    var parentPath = path.dirname(req.settings.views);
    var ret = parentPath.concat(sep +  tempFileFolder);
    return ret;
}

现在,除了在运行时使用app.setting (该应用程序是在app.js中声明的)之外,我没有其他方法来获取应用程序文件夹。所以我做了一个小的“中间件”来传输带有req对象的值,如下所示。

在app.js中:

代码语言:javascript
复制
app.use(function(req, res, next) {
    req.settings = app.settings;
    next();
});

tempFileFolder是一个你可以自己命名的文件夹。

sep是文件夹分隔符(在windows中为\,在linux中为/)

此外,在linux中运行时,您还需要查看文件夹权限设置。

这种组合在我的环境中工作得很好(使用angularjs)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25502925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档