收藏夹吃灰系列:使用MultipartFile实现图片指定路径上传下载并使用postman测试教程 | 附完整源码,强烈建议收藏!

Posted bug菌√

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了收藏夹吃灰系列:使用MultipartFile实现图片指定路径上传下载并使用postman测试教程 | 附完整源码,强烈建议收藏!相关的知识,希望对你有一定的参考价值。

前言:

        项目基本都会涉及图片的上传下载,今晚,bug菌给大家带来一份干货!手把手教学,如何通过MultipartFile实现图片的上传,以及通过path相对路径下载图片?至于怎么实现,咱们往下看,好好看好好学!

若是文章对小伙伴们有所帮助,还请不忘给bug菌一个赞,你们的鼓励就是对bug菌最大的支持!

         那么接下来,干正事啦!bug菌要开始上课了喔~

MultipartFile  这个类一般是用来接受前台传过来的文件,我也通过该类来接收前端传的图片!

controller

/**
 * 图片导入
 * @param imageFile
 * @param response
 * @return
 */
@PostMapping(value = "/imageUpload")
@ApiOperation(value = "接线图片上传", notes = "接线图片上传")
public BaseResponse imageUpload(@RequestParam(value = "imageFile", required = true) MultipartFile imageFile) {
   return iMyService.imageUpload(imageFile);
}

/**
 * 图片导出
 * @param imagePath
 * @param response
 */
@GetMapping(value = "/imageDownload")
@ApiOperation(value = "接线图片下载", notes = "接线图片下载")
public void imageDownload(@RequestParam(value = "imagePath", required = true) String imagePath,HttpServletResponse response) {
  return iMyService.imageDownload(imagePath,response);
}

  service

/**
 * 图片上传
 * @param imageFile
 * @return
 */
BaseResponse imageUpload(MultipartFile imageFile);

/**
 * 图片下载
 * @param imagePath
 * @return
 */
void imageDownload(String imagePath, HttpServletResponse response);

application-dev.properties

#图片保存地址
jxt.image.path=G:/image/

serviceImpl

@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class MyServiceImpl implements IMyService {
@Value("${jxt.image.path}")
File imagePath;

private static final List<String> CONTENT_TYPES = Arrays.asList("image/jpeg", "image/png", "image/jpg");

/**
 * 图片上传
 */
@Override
public BaseResponse imageUpload(MultipartFile image) {
    // 校验图片类型
	String contentType = image.getContentType();
	if (!CONTENT_TYPES.contains(contentType)){
		// 图片类型不合法,直接返回异常
		log.info("文件类型不合法:{}", image.getOriginalFilename());
		return ResponseUtil.getErrorByCodeEnum(ErrorCodeEnum.IMAGE_TYPE_ERROR);
	}
   try {
      //校验是否传空
      if (image == null || image.isEmpty()) {
         return ResponseUtil.getErrorByCodeEnum(ErrorCodeEnum.IMAGE_UPLOAD_EMPTY);
      }
      //获取文件名
      String fileName = image.getOriginalFilename();
      log.info("上传的文件名:" + fileName);
      //设置文件存储路径
      //以时间作为文件夹分类:eg:G:/images/20210615/demo.jpg
      String filePath = "/" + DateFormatUtils.format(new Date(), "yyyyMMdd") + "/" + fileName;
      File file = new File(imagePath, filePath);
      //检测是否存在该目录
      if (!file.getParentFile().exists()) {
         file.getParentFile().mkdirs();
      }
      //写入文件
      image.transferTo(file);
      //todo 将路径写入数据库

      return ResponseUtil.getSuccessResponse(ErrorCodeEnum.IMAGE_UPLOAD_SUCCESS);
   } catch (IOException e) {
      log.error(e.getMessage(),e);
   }
   return ResponseUtil.getErrorByCodeEnum(ErrorCodeEnum.IMAGE_UPLOAD_ERROR);
}


/**
 * 根据图片地址下载
 *
 * @return 图片
 */
@Override
public void imageDownload(String path,HttpServletResponse response) {
   FileInputStream inputStream = null;
   try {
      // 判断路径是否为空
      if (StringUtils.isEmpty(path)) {
         throw new RuntimeException(ErrorCodeEnum.IMAGE_EMPTY.getMessage());
      }
      //获取文件真实路径
      String fileUrl = imagePath + path;
      //设置文件头,最后一个参数是设置下载文件名
      response.setHeader("Content-Disposition", "attachment;fileName=" + FilenameUtils.getName(path));

      File file = new File(fileUrl);
      inputStream = new FileInputStream(file);
      OutputStream outputStream = response.getOutputStream();
      IOUtils.copyLarge(inputStream, outputStream);
      outputStream.flush();
   } catch (IOException e) {
      log.error(e.getMessage(),e);
   } finally {
      //关流
      IOUtils.closeQuietly(inputStream);
   }
}
}

接下来就是见证奇迹的时刻了!代码写的是否无误,还需测!高光时刻~

1、打开postman;先进行图片上传的接口测试!示例如下具体操作!看好:能不能行,一张图给你答复。

2、接着点击Send发送请求后,好家伙,竟然上传成功了!不是bug不是bug(内心压根丝毫不慌!)

3、接下来,继续测试图片下载接口,看看是否能成功?params中填好你所上传好的图片相对地址,看看是否能拿到图片,答案马上揭晓;

噔噔噔~~~

ok,接口调用成功,图片已成功拿到!

4、再看看浏览器是否能直接根据url自动下载?操作:打开浏览器,将postman中的访问URL粘贴到浏览器搜索栏,直接回车即可。如下:

eg:http://192.168.0.136:8083/my-base/imageDownload?imageFileName=/20210604/wiringDiagram.png

好家伙,搞定!图片也下载成功了!

OK,以上就是本期的所有干货内容啦!若是您还满意,请不要吝啬您的一个赞哦,要是我,果断就给它pia的一下点亮咯!

不用犹豫直接进我的收藏夹吃灰去吧!不管以后用不用的上,先吃上灰再说,谁知道后期还捞不捞的到呢?

若是还不够吃,bug菌还有!再给你投点?

热文推荐: 


❤如果文章对您有所帮助,就请在文章末尾的左下角把大拇指点亮吧!(#^.^#);

❤如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】;

❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

❤版权声明:本文为博主原创文章,转载请附上原文出处链接和本文声明,版权所有,盗版必究!(*^▽^*).

以上是关于收藏夹吃灰系列:使用MultipartFile实现图片指定路径上传下载并使用postman测试教程 | 附完整源码,强烈建议收藏!的主要内容,如果未能解决你的问题,请参考以下文章

收藏夹吃灰系列:Springboot配置Thymeleaf实现静态页面访问 | 超级详细,建议收藏!

收藏夹吃灰系列:实现springboot使用JDK自带的keytool生成SSL证书并配置HTTPS | 超级详细,建议收藏!

收藏夹吃灰系列:实现图片倒排序并取出时间最近的那一张!并下载到本地 | 超级详细,建议收藏!

收藏夹吃灰系列:实现图片倒排序并取出时间最近的那一张!并下载到本地 | 超级详细,建议收藏!

收藏夹吃灰系列:插入更新sql语句 ON DUPLICATE KEY UPDATE 使用详解 | 超级详细,建议收藏!

收藏夹吃灰系列:插入更新sql语句 ON DUPLICATE KEY UPDATE 使用详解 | 超级详细,建议收藏!