java 代码jodd 上传图片到文件服务器

    xiaoxiao2023-10-13  165

    今天项目需要上传图片到文件服务器,使用的是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(); } }

     

    最新回复(0)