通过 requests/locust 上传图片时得到 text/plain 的 mimetype

Got text/plain for mimetype when upload image by requests/locust

当我使用像 Postman 这样的开发工具上传文件时,我的 Express.js server using multer

import multer from 'multer';

const upload = multer();
app.post('/api/upload-file',  upload.single('file'), (req, res) => {
  console.log(req.file);
  res.sendStatus(200);
});

可以正确解析文件,包括 mimetype 字段并打印

{
  fieldname: 'file',
  originalname: 'my.png',
  encoding: '7bit',
  mimetype: 'image/png',
  buffer: <Buffer ...>,
  size: 9693
}

但是,当我使用 locust (for load testing, and it is requests 支持)通过这两种方法上传相同的文件时:

from requests_toolbelt.multipart.encoder import MultipartEncoder

@task
def upload_img_1(self):
    file = open('path/to/my.png', 'rb')
    self.client.post(
        '/api/upload-file',
        files={'file': file})

@task
def upload_img_2(self):
    file = open('path/to/my.png', 'rb')
    m = MultipartEncoder(
        fields={'file': ('my.png', file, 'image/png')})
    self.client.post(
        '/api/upload-file',
        files={'file': m})

我在 Express.js 服务器中得到的 mimetypetext/plain 这是错误的。

{
  fieldname: 'file',
  originalname: 'my.png',
  encoding: '7bit',
  mimetype: 'text/plain',
  buffer: <Buffer ...>,
  size: 9693
}

如何得到正确的mimetype

终于在

def upload_img(self):
    file = open('path/to/my.png', 'rb')
    files = {
        'file': ('my.png', file, 'image/png'),
    }
    self.client.post(
        '/api/upload-file',
        files=files)

这一次 Express.js 服务器可以正确获取 mimetype 文件作为 image/png

希望对以后遇到同样问题的人有所帮助。