在 POSTMAN 上使用 PUT/POST 方法上传文件

Posted

技术标签:

【中文标题】在 POSTMAN 上使用 PUT/POST 方法上传文件【英文标题】:Upload a file with PUT/POST method on POSTMAN 【发布时间】:2018-02-27 04:20:09 【问题描述】:

我正在尝试将带有 POSTMAN 的文件上传到此 URL

http://localhost:3000/bucket/test/files/

并且应该在我的控制器中得到结果:

    put(request, response, args) 
    //HERE IN THE REQUEST.BODY 
    console.log(request.body)

    let fileManager = request.modules.VMFile;
    let mimeTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/x-icon', '  video/mpeg', 'text/html', 'video/x-msvideo', 'application/msword', 'application/pdf', 'application/vnd.ms-powerpoint', 'application/x-rar-compressed'];
    let maxFileSize = 4 * 1024 * 1024;

    fileManager.initUpload(mimeTypes, maxFileSize);

    fileManager.receive((files) => 

        fileManager.forEachFileContent(files, (file, content) => 

            minioClient.putObject(request.body.bucket, request.body.name, content, file.size, file.mimetype, function (err, etag) 
                response.setData("File uploaded").apply();
                return console.log(err, etag)
            )

        );
        fileManager.clearFilesFromTmp(files);
    );

在 POSTMAN 中我得到了这个:

标题上什么都没有,但我只能 PUT(或 POST,我试图用 POST 更改我的路由但同样的问题)名称和存储桶字段...我的文件字段上什么都没有...

【问题讨论】:

如果是快递申请,需要写app.put(<URL_HERE>, handler_function)。您的代码 sn-p 不完整。 它是一个基于express的私有API,但是我的sn-p可以工作 @Cupkek05 澄清一下,当邮递员通过网络发出请求时,您的控制器中什么也没得到?另外,你的标题不需要 content-length 和 content-type 吗? @DanielLane 我不知道,因为我检查了一些他们主张让内容类型为空的主题,我会尝试一下 @Cupkek05 看起来大卫的建议可能对你有用,试试看。 【参考方案1】:

在使用Postman 时,尤其是在您测试文件上传时,请确保,

    标题中: 标题中的Content-type 字段已设置为multipart/form-data。 在正文中: form-data 选项应保留为默认值。 从右侧的下拉列表中选择 File 选项而不是 text。 在占位符为key的文本框中键入File

【讨论】:

使用 multipart-formdata 添加内容类型,感谢您的帮助 如何使用 content-type: application/json 发送数据 @rammanoj 在“Headers”选项卡下(在 POSTMAN 中),您需要添加键“Content-Key”(如果您开始输入,您将获得自动建议),然后在下一个框中您可以提供“application /json"(同样,当你开始输入时,你会得到自动建议。希望这会有所帮助! 谢谢!解决了我的问题。我失去了几个小时只是因为我没有做最后一点Type File in text box where placeholder is key.?‍♂️ 超级有帮助!!非常感谢!【参考方案2】:

您可能做得对,但有时 POSTMAN 不能正常工作。我编写了一个 API 来接受文本和文件。 从 Postman 调用服务时。

    我将Content-Type 设置为"application/json",将Accept 设置为"application/json"。 在正文中,我传递了文本和文件 它不起作用,我尝试了多次。我关闭了邮递员和笔记本电脑。

第二天早上醒来又打了一次,它奏效了。下面是工作请求的图像。

【讨论】:

上传时可能获取 user.png 大小?对这种情况有什么想法吗?【参考方案3】:

当我尝试从表单数据上传图像时,会输出这些文字。什么原因,在哪里调整: 此文件不在您的工作目录中。您与之共享此请求的队友将无法使用此文件。为了让协作更轻松,您可以在“设置”中设置工作目录。

【讨论】:

这看起来像是一个问题而不是一个答案。您应该删除它,而是通读原始问题的答案和 cmets。【参考方案4】:

在使用 express-fileupload 时,并非所有 David 的回答都对我有用。简而言之,我在使用express-fileupload 时不需要Content-Type 标头。

注意,这些步骤适用于 npm / express-fileupload / Postman

    确保标头Content-Type 已禁用。设置此项会强制 req.files 未定义。 根据 Davids 的回答,使用 form-data 并将 key 设置为您需要的任何值,然后上传文件。 如果你在你的快递应用中console.log(req.files.YOUR_KEY),你应该有一个包含上传文件的对象,在我的例子中是req.files.file

这是邮递员的样子(再次禁用Content-Type 标头):

这是使用console.log(req.files)时控制台中的输出:

【讨论】:

以上是关于在 POSTMAN 上使用 PUT/POST 方法上传文件的主要内容,如果未能解决你的问题,请参考以下文章

postman安装及使用

[转]postman 官方文档解说

在 AWS CloudFront 上启用 POST/PUT/DELETE?

使用Postman完成接口测试

接口测试之postman使用

基于Postman的API自动化测试