gpt4 book ai didi

node.js - 使用 NodeJs 提供临时文件

转载 作者:搜寻专家 更新时间:2023-10-31 22:21:16 24 4
gpt4 key购买 nike

我正在构建一个 NodeJs SOAP 客户端。最初,我想象服务器(即 Node SOAP 客户端)将允许通过 REST API 下载文档(REST API 已通过身份验证)。在谷歌和 SO 上花费了大量时间后,看起来这是不可能的。

这意味着当请求下载文档时,我必须对文档进行 SOAP 调用并通过 AJAX 将 URL 返回给 REST 客户端。

为了做到这一点,我需要:

  1. 在Node中临时创建一个文件
  2. 获取其 URL 并返回到 Web 客户端
  3. 当请求文件并发送响应时,删除文件(出于安全目的)

这是我的问题:

  1. 是否已经有执行此操作的框架? temp module可能是一个选项,但我真的想在每次请求后删除,而不是在一段时间后删除。
  2. 如果没有,我可以只使用 NodeJs 文件系统和 Express static module 来做到这一点吗? ?基本上我们会将静态模块修改为如下所示:

    return function static(req, res, next) {
    if ('GET' != req.method && 'HEAD' != req.method) return next();
    var path = parse(req).pathname;
    var pause = utils.pause(req);

    /* My Added Code Here */
    res.on('end', function(){
    // delete file based on req URL
    })
    /* end additions */

    function resume() {
    next();
    pause.resume();
    }

    function directory() {
    if (!redirect) return resume();
    var pathname = url.parse(req.originalUrl).pathname;
    res.statusCode = 301;
    res.setHeader('Location', pathname + '/');
    res.end('Redirecting to ' + utils.escape(pathname) + '/');
    }
    function error(err) {
    if (404 == err.status) return resume();
    next(err);
    }
    send(req, path)
    .maxage(options.maxAge || 0)
    .root(root)
    .hidden(options.hidden)
    .on('error', error)
    .on('directory', directory)
    .pipe(res);
    };

res.on('end',... 是否有效?或者,我是否应该创建一些中间件来为指向临时文件的 URL 执行此操作?

最佳答案

找到两个 SO 问题来回答我的问题。所以显然我们不需要使用 express.static 中间件。我们只需要文件系统 download a file :

app.get('/download', function(req, res){
var file = __dirname + '/upload-folder/dramaticpenguin.MOV';
res.download(file); // Set disposition and send it.
});

如果我们想stream and then delete关注:

app.get('/download', function(req, res){
var stream = fs.createReadStream('<filepath>/example.pdf', {bufferSize: 64 * 1024})
stream.pipe(res);

var had_error = false;
stream.on('error', function(err){
had_error = true;
});
stream.on('close', function(){
if (!had_error) fs.unlink('<filepath>/example.pdf');
});

关于node.js - 使用 NodeJs 提供临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484350/

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