今天项目需要上传图片到文件服务器,使用的是jodd,特做记录
1.导入依赖
<dependency> <groupId>org.jodd</groupId> <artifactId>jodd-http</artifactId> <version>5.0.2</version> </dependency>2.post提交图片
private String uploadExecute(MultipartFile multipartFile){ try { File file = multipartFileToFile(multipartFile); HttpRequest request = HttpRequest.post(pictureUrl); request.contentType("multipart/form-data"); request.charset("utf-8"); Map<String,Object> params=new HashMap<>(); request.form("file",file); HttpResponse response = request.send(); String respJson = response.bodyText(); return respJson; }catch (Exception e){ e.printStackTrace(); logger.error("上传图片异常:{}",e); } return null; }遇到问题:request.form("file",file); form方法不支持multipartFile ,需要将multipartFile 类型转成File类型
3.multipartFile 类型转成File类型
因为我是springboot 项目,转换的时候遇到了很多坑,记录一下
通过配置multipartResolver强制转换File f = (File) xxx,因为使用
//显示声明CommonsMultipartResolver为mutipartResolver @Bean(name = "multipartResolver") public MultipartResolver multipartResolver(){ CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding("UTF-8"); resolver.setResolveLazily(true);//resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常 resolver.setMaxInMemorySize(40960); resolver.setMaxUploadSize(50*1024*1024);//上传文件大小 50M 50*1024*1024 return resolver; }
导致接收不到图片信息,因为springboot已经封装了自己的图片解释器,这样会导致mutipartFile 接收不到参数
springboot通过将流将mutipartFile 转换
private File multipartFileToFile( MultipartFile file ) throws Exception { File toFile = null; if(file.equals("")||file.getSize()<=0){ file = null; }else { InputStream ins = null; ins = file.getInputStream(); toFile = new File(file.getOriginalFilename()); inputStreamToFile(ins, toFile); ins.close(); } return toFile; } private void inputStreamToFile(InputStream ins, File file) { try { OutputStream os = new FileOutputStream(file); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } os.close(); ins.close(); } catch (Exception e) { e.printStackTrace(); } }
