【问题标题】:How to tell if a POST request contains files for uploading in Sails.js?如何判断 POST 请求是否包含用于在 Sails.js 中上传的文件?
【发布时间】:2016-11-12 17:22:46
【问题描述】:

我使用sails.js 创建后端,它支持在我的一种控制器方法中同时发布文本和上传文件/图像。由于业务逻辑,我需要判断对此控制器方法的 POST 请求是否包含要上传的文件。

要上传文件,我在sails.js 中使用内置Skipper module 并在req 参数中使用file 字段。例如,如果我需要上传图片,我将images字段放入到后端/sails.js的请求中:

req.file('images').Upload({...}); 

我尝试使用req.file('images') 来检查传入的请求是否包含要通过以下方式上传的文件,但它不起作用 - 不上传文件的请求仍然给出req.file('images') = true

if (!!req.file('images')) { // this turns out to be true regardless of uploading file or not
            return uploadToS3(req, 'images');
        }

sails.log.info('creating entity without uploading file');
return createEntityWithoutImage(req.params.all());

知道如何判断 POST 请求是否包含要上传的文件吗?

【问题讨论】:

    标签: javascript node.js file-upload sails.js


    【解决方案1】:

    您可以通过以下方式查看用户上传的文件数:

    req.file('images')._files.length

    这是船长的无证特性:

    https://github.com/balderdashy/skipper/blob/master/standalone/Upstream/Upstream.js#L51

    所以它可以在未来的版本中被弃用。所以请确保,在没有先测试之前不要升级模块。

    【讨论】:

    • 感谢您的建议,但是,我收到了这个错误:Error: EMAXBUFFER: An Upstream (NOOP_images) timed out before it was plugged into a receiver. It was still unused after waiting 4500ms. You can configure this timeout by changing the maxTimeToBuffer` option.. I guess when you call req.file('images')._files.length, the req .file()` 函数被执行,如果在该时间窗口内没有收到文件输入,则会导致上述错误。
    • 我想我很久以前也遇到过同样的问题,我用过这个:stackoverflow.com/questions/28185223/… 但它可能不再起作用了(在这个答案上得到负面评价:(如果它适合你,请赞成;)
    猜你喜欢
    • 1970-01-01
    • 2019-01-07
    • 2019-08-17
    • 2014-12-24
    • 2010-10-28
    • 1970-01-01
    • 2021-05-07
    • 2021-02-07
    • 1970-01-01
    相关资源
    最近更新 更多