首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Node.js
Express
PPA for Ubuntu
ppa:chris-lea/node.js
V2EX  ›  Node.js

node 中间层转发文件上传是否必须将文件存在本地呢

  •  
  •   az09py · 85 天前 · 1357 次点击
    这是一个创建于 85 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先通过 formidable 解析文件,会把文件存到本地 然后通过 request.post 上传文件,这里必须文件必须通过 form.append (‘ file ’,fs.createReadStream(file.path))进行处理 这样就会在服务器上创建文件

    8 回复  |  直到 2019-02-15 18:20:13 +08:00
        1
    libook   85 天前
    不需要吧,用 Stream,先建立客户端发来的请求的读 Stream,然后再建立转发到目标服务的写 Stream,然后两边管道接在一起。
        2
    hcymk2   85 天前
    pipe。
        3
    doublleft   85 天前
    不用,可以 form.buffer
        4
    az09py   85 天前
    @libook 直接不需要 formidable 解析成 File 了么
        5
    az09py   85 天前
    @hcymk2 可以大致讲讲思路吗
        6
    libook   85 天前
    看你想做哪些事情了,如果什么事情都不做,直接把上游发来的文件传递给下游,可以直接把 Stream 传递过去。

    ```
    http.createServer(function(req, res) {
    //这里的 req 是个 Stream
    const options = {
    hostname: 'http://你的上传服务器地址',
    port: 80,
    path: '/upload',
    method: 'POST',
    headers: {
    //这里写一些必要的头
    }
    };

    /**
    * 这个 uploadReq 也是个 Stream
    */
    const uploadReq = http.request(options, (res) => {
    //这里处理上传服务器的 response
    });

    req.pipe(uploadReq);//关键点,把上游发来的 Stream 直接管道接到下游上传服务器的 Stream 上


    }).listen(8080);
    ```

    上面是个示范,不是一个可执行的代码,只是提供一个思路。
        7
    lps   84 天前
    可以参考 eggjs 的文件上传,不需要保存临时文件,直接通过 stream 转发到 OSS 存储
        8
    dtlqwjj   63 天前
    @doublleft file.buffer,怎么添加到 formdata,是 xx.append('file', file.buffer)吗?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1918 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 20ms · UTC 16:15 · PVG 00:15 · LAX 09:15 · JFK 12:15
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1