Python http同时上传多个文件

Python http同时上传多个文件

  最近遇到一个需求,树莓派要通过网络上传图片到服务器,每次上传6张图片,如果要一张一张上传太慢,想一次上传。所以在网上搜了一下python的多附件上传,但是没有找到直接能用的代码,最后把网上的代码拿来,调试通过,记录一下。

1、python 上传代码
def uploadImgs(webConf, imgFilePaths, log):
    url = f"http://{webConf['host']}:{webConf['port']}{webConf['upload_img_path']}"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0',
        'Referer': url
    }
    
    data = [("realName", None), ("typeNum", '0'), ("orderNum", '-1'), ("remark", "")]
    files = []
    try :
        for i in range(0, len(imgFilePaths)):
            file = open(imgFilePaths[i], 'rb')
            files.append(file)
            fileName = os.path.basename(file.name)
            filePart = ('files', (fileName, file, 'image/jpeg'))
            data.append(filePart)
        multipart_encoder = MultipartEncoder(data)
        headers['Content-Type'] = multipart_encoder.content_type
        response = requests.post(url, data=multipart_encoder, headers=headers)
        return response.json()
    except Exception as ex:
        log.exception("上传文件失败")
        for file in files:
            file.close()
        return json.loads('{"code": -1}')

realName 并没有什么用,实际文件名从filePart中取。

2、springboot 接口
    /**
     * 上传附件
     * @param uploadForm
     * @return
     */
    @PostMapping("/uploadImg")
    @ApiOperation(value = "上传图片",notes = "上传图片")
    public AjaxResult uploadImg(@ModelAttribute UploadImgDto uploadForm) throws IOException {
        MultipartFile[] files = uploadForm.getFiles();
        String filePath = RuoYiConfig.getUploadPath();
        MultipartFile file = null;
        String fileName = null;
        byte[] bytes = null;
        String extensionName = null;
        String saveName = null;
        Path path = null;
        List<Attach> attachs = Lists.newArrayList();
        List<String> saveNames = Lists.newArrayList();
        for(int i=0; i<files.length; i++){
            file = files[i];
            if (file.isEmpty()) {
                continue;
            }
            // 获取文件名
            fileName = file.getOriginalFilename();
            // 获取文件的字节
            bytes = file.getBytes();
            extensionName = fileName.split("\\.")[1];
            saveName = UUID.randomUUID() + "." + extensionName;
            path = Paths.get(filePath, saveName);
            ImgUtil.saveImg(path, bytes);
            saveNames.add(saveName);
        }
        return success(saveNames);
    }
/**
 * 上传附件
 * 
 * @author xxxx
 * @date xxxx-xx-xx
 */
@Data
@ApiModel(value = "上传附件参数")
public class UploadImgDto
{
    @ApiModelProperty(value = "文件类型")
    private Long typeNum = 0L;

    private String remark;

    @ApiModelProperty(value = "图片文件")
    @Transient
    private MultipartFile[] files;

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
            .append("typeNum", getTypeNum())
            .append("remark", getRemark())
            .toString();
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值