Springboot使用MultipartFile上传图片

菜鸡程序员进阶之路——初入职场,要写一个图片上传的功能接口,搞定它。
Controller层接收参数,因为我是要同时上传多张图片,所以用数组接收 MultipartFile[] ,一张图片就只用MultipartFile就行了。
翠花,上代码.
@PostMapping("uploadFiles")
@ResponseBody
public List<String> uploadFiles(@ApiParam("只支持jpg图片格式,可以一次上传多张图片")
                                @RequestParam("files") MultipartFile[] files){
    List<String> strings = fileService.uploadFiles(files);
    return strings;
}
controller层很简单,只做参数的接收,处理数据到业务层
service层:
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

@Service
@Slf4j
public class FileService {

    @Autowired
    private MongoTemplate mongoTemplate;

    private static final List ALLOW_IMAGE_TYPE = Arrays.asList("image/jpeg");

    /**
     * 图片上传
     * @Param files
     * @return
     */
    public List<String> uploadFiles(MultipartFile[] files) {

        List<String> list = new ArrayList<>();
          for (int i = 0; i < files.length; i++) {
            //判断图片类型
            String imageType = files[i].getContentType();
            if (!ALLOW_IMAGE_TYPE.contains(imageType)){
                log.info("图片类型错误!");
                throw new EqException(ExceptionEnum.IMAGE_TYPE_ERROR);
            }
            //解析图片内容
            BufferedImage bufferedImage = null;
            try {
                bufferedImage = ImageIO.read(files[i].getInputStream());
            } catch (IOException e) {
                log.info("解析图片失败!",e.getMessage());
                throw new EqException(ExceptionEnum.IMAGE_TYPE_ERROR);
            }
            if (bufferedImage == null){
                log.info("解析图片失败!");
                throw new EqException(ExceptionEnum.IMAGE_TYPE_ERROR);
            }
            //设置上传图片名称
              long time = new Date().getTime();
              String imageName = time + ".jpg";
            //得到上传文件夹对象
            File imagePathFile = new File(EqConstants.IMG_PATH);
            //上传图片
            try {
                files[i].transferTo(new File(imagePathFile,imageName));

            } catch (IOException e) {
                log.info("图片上传失败!");
                throw new EqException(ExceptionEnum.FILE_UPLOAD_ERROR);
            }
              list.add(EqConstants.IMG_URL+imageName);
        }
        return list;
    }
}
service层将图片解析,然后输出到自定义的目录,输出完毕后把图片的路径返回。
自定义的文件存放路径和返回路径前缀
public class EqConstants {
    //上传路径
    public static final String IMG_PATH = "D:\\develop\\nginx-1.18.0\\file\\images";
    //访问路径
//    public static final String IMG_PATH = projectPath()+"\\images";
    public static final String IMG_URL = "http://image.equip.com/images/";

    /**
     * 获取当前项目路径
     */
    public static String projectPath(){
        String projectPath = System.getProperty("user.dir");
        System.out.println("projectPath==" + projectPath);
        return projectPath;
    }
}
最后,让我们用Postman来测试一下。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上传成功,返回连接

OK!测试成功

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值