Postman:postman form-data能同时传文件和对象嘛?

该博客讨论了在Spring MVC中如何处理同时上传MultipartFile文件和JSON对象的问题。作者发现Postman无法同时通过form-data发送MultipartFile和对象,因此改用将对象转换为JSON字符串进行传递。在服务器端,接收到JSON字符串后解析为对象,并将其与上传的图片一起存入数据库。代码示例展示了如何实现这一过程。
摘要由CSDN通过智能技术生成

最近遇到一个这样的需求 ,就是说我需要上传图片到服务器,也需要将这张照片的其他信息写入到数据库中,比如标题、描述和标签。
照片本身用的MVC的Multipartfile,其他信息开始用的对象来接收的。

  • 这是我的服务接口定义
    /**
     * 将上传的图片信息和相应的图片描述
     * 写入到数据库中 事务处理,只有写入成功之后,才能够添加到数据库中
     * https://blog.csdn.net/lizhiyuan_eagle/article/details/93484955,
     * 为什么用json传信息
     * @param bean
     * @return
     */
    @RequestMapping("/upRelease")
    public RespBean upRelease(SpringUserReleaseInputBean bean){
  • SpringUserReleaseInputBean 定义
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SpringUserReleaseInputBean extends ActionRootInputBean implements FastJsonInterface {
    /**
     * 传入的照片信息对象
     */
    private Picture params;
    /**
     * 照片文件
     */
    private MultipartFile file;
}

类后面的继承类和实现接口可以不要

但是当我测试接口的时候,才发现,postman form-data没有同时传Multipartfile和对象。

参考 PostMan上传文件同时传json到后台Controller才知道postman不能同时传这两个数据。

然后参考上面文章,将传入的对象改为String的字符串,在代码中做相应处理,对于前端传参,可以将对象json化,问题不大。

  • 处理json字符串
		// 判断字符串是否为json格式
        String picInfo = bean.getPicInfo();
        JsonElement jsonEle = null;
        try{
            jsonEle = new JsonParser().parse(picInfo);
        }
        catch (Exception e){
            e.printStackTrace();
            return RespBean.error("图片信息非json格式");
        }
        if (respBean.getStatus().equals(200) && jsonEle.isJsonObject()){
            // 转换成picture对象
            Picture params = JSONObject.parseObject(picInfo, Picture.class);
        }
  • 所有代码
    /**
     * 将上传的图片信息和相应的图片描述
     * 写入到数据库中 事务处理,只有写入成功之后,才能够添加到数据库中
     * https://blog.csdn.net/lizhiyuan_eagle/article/details/93484955,
     * 为什么用json传信息
     * @param bean
     * @return
     */
    @RequestMapping("/upRelease")
    public RespBean upRelease(SpringUserReleaseInputBean bean){
        MultipartFile file = bean.getFile();
        Assert.assertNotEmpty(file, "file 不能为空");
        RespBean respBean = upPicture(file);
        // 判断字符串是否为json格式
        String picInfo = bean.getPicInfo();
        JsonElement jsonEle = null;
        try{
            jsonEle = new JsonParser().parse(picInfo);
        }
        catch (Exception e){
            e.printStackTrace();
            return RespBean.error("图片信息非json格式");
        }
        if (respBean.getStatus().equals(200) && jsonEle.isJsonObject()){
            // 转换成picture对象
            Picture params = JSONObject.parseObject(picInfo, Picture.class);

            params.setPicUrl(respBean.getMsg());
            params.setPicTime(JaDateTime.now().dateValue());
            params.setPicStatus(2);
            // 判断一下 请求的状态码
            // 插入到数据库中
            return pictureService.upRelease(params);
        }
        return RespBean.error("图片上传失败");
    }
}
  • 附加上传图片的代码
	// 在springboot的配置文件中第一一个这样的属性,传入地址
	@Value("${prop.upload-folder}")
    private String UPLOAD_FOLDER;

    /**
     * 实现文件是上传到指定的位置
     * 传入MultipartFile的文件
     * @param file
     * @return
     */
    public RespBean upPicture(@RequestBody MultipartFile file) {
        if (Objects.isNull(file) || file.isEmpty()) {
            return RespBean.error("文件为空,请重新上传",file);
        }
        try {
            byte[] bytes = file.getBytes();
            Path path = Paths.get(UPLOAD_FOLDER + UUID.randomUUID().toString()+file.getOriginalFilename());
            //如果没有files文件夹,则创建
            if (!Files.isWritable(path)) {
                Files.createDirectories(Paths.get(UPLOAD_FOLDER));
            }
            //文件写入指定路径
            Files.write(path, bytes);
            return RespBean.ok(path.toString(),file);
        } catch (IOException e) {
            e.printStackTrace();
            return RespBean.error("后端异常...");
        }
    }
  • bean
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SpringUserReleaseInputBean extends ActionRootInputBean implements FastJsonInterface {
    /**
     * 照片文件
     */
    private MultipartFile file;
    /**
     * 传入的照片信息 json格式
     */
    private String picInfo;
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值