【问题标题】:Node.js server using Express.js uploaded file nameNode.js 服务器使用 Express.js 上传文件名
【发布时间】:2013-03-01 06:56:14
【问题描述】:

一些背景知识:我正在尝试使用 node.js 创建一个 Web 服务,并表示它接受带有附加图像的 POST 请求。

我已经能够成功发送请求,但我希望能够对图像做一些事情。我看到的所有示例都使用表单来使用 POST 上传文件,这样做允许他们为要上传的文件命名。允许他们执行以下操作

app.post('/upload',function(req,res) {
    req.files.formName // have access to the file's information
}

我只是希望能够以类似 REST 的方式创建 POST 请求,因此文件通过 API 调用上传,因此当文件到达服务器时,express 给它一个随机名称和访问方式files 数组中的 file 是使用实际的图片文件名,这取决于用户的文件名是什么,我不能让它保持不变。

app.post('/upload',function(req,res) {
    req.files.<what goes here>
    req.files[0] // this wont work
}

感谢您的帮助,如果我以错误的方式执行此操作,请说使用 express 是一个糟糕的选择,那么请继续提出建议。我正在做这个项目来学习如何使用 node.js 以及所有这些都是好的。

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    它仍然以相同的方式工作。

    即使您以类似 REST 的方式发送 POST,您仍然需要在 api 调用中命名参数。

    例如,如果您将图片命名为“图像”。

    var data = {"image":imageData};
    

    访问它仍然是

    req.files.image
    

    【讨论】:

    • 我使用的是 Webstorms REST 客户端,所以我猜它总是选择表单名称作为文件名。感谢您的提醒。
    【解决方案2】:

    如果您想访问原始 HTTP 正文:

    app.post('/upload', function(req, res) {
      var chunks = '';
      req.on('data', function(data) {
        chunks += data;
      });
      req.on('end', function() {
        console.log('received', chunks.length, 'bytes', chunks);
        res.send(...);
      });
    });
    

    (如果你还需要使用express.bodyParser,请确保你app.use()设置上述路由之后)

    【讨论】:

      【解决方案3】:

      对于简单的上传,您只需要这些配置:

      app.use(express.static(__dirname + '/upload'));
      app.use(express.bodyParser({uploadDir:__dirname + '/upload'}));
      

      在玉模板中:

      form(method='post', action='/upload', enctype='multipart/form-data')
          input(name='file', type='file')
          input(type='submit')
      

      【讨论】:

        猜你喜欢
        • 2022-06-22
        • 2014-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-21
        相关资源
        最近更新 更多