本地文件转为MultipartFile,图片地址转MultipartFile

news/2024/4/17 7:11:05

目录

  • 一、引入依赖包
  • 二、本地文件转为MultipartFile
  • 三、图片地址转 MultipartFile

一、引入依赖包

 <!-- 文件上传工具类 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency>

二、本地文件转为MultipartFile

/*** 本地文件转为MultipartFile** @param picPath* @return*/public static MultipartFile pathToMultipartFile(String picPath) throws Exception{FileItem fileItem = createFileItem(picPath);MultipartFile mfile = new CommonsMultipartFile(fileItem);return mfile;}/*** 将file转换成fileItem** @param filePath* @return*/public static FileItem createFileItem(String filePath) throws Exception{FileItemFactory factory = new DiskFileItemFactory(16, null);String textFieldName = "textField";FileItem item = factory.createItem(textFieldName, "text/plain", true, "MyFileName");File newfile = new File(filePath);int bytesRead = 0;byte[] buffer = new byte[8192];FileInputStream fis = null;OutputStream os = null;try {fis = new FileInputStream(newfile);os = item.getOutputStream();while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}} catch (IOException e) {System.out.println("createFileItem:文件转换异常!");throw e;} finally {try {if (null != os){os.close();}if (null != fis){fis.close();}} catch (IOException e) {System.out.println("createFileItem:关流异常!");throw e;}}return item;}

三、图片地址转 MultipartFile

/*** 图片地址转 MultipartFile* @param url* @return*/public static MultipartFile uploadImgUrlToMultipartFile(String url) {byte[] bytes = downloadPicture(url);//url.substring(url.lastIndexOf(".")); 此处为获取扩展名,根据情况修改String name = "imageFile" + url.substring(url.lastIndexOf("."));MultipartFile multipartFile = getMultipartFile(name, bytes);return multipartFile;}//二进制文件转换MultipartFilepublic static MultipartFile getMultipartFile(String name, byte[] bytes) {MultipartFile mfile = null;ByteArrayInputStream in = null;try {in = new ByteArrayInputStream(bytes);FileItemFactory factory = new DiskFileItemFactory(16, null);FileItem fileItem = factory.createItem("mainFile", "text/plain", false, name);IOUtils.copy(new ByteArrayInputStream(bytes), fileItem.getOutputStream());mfile = new CommonsMultipartFile(fileItem);in.close();} catch (Exception e) {e.printStackTrace();}return mfile;}//获取图片二进制private static byte[] downloadPicture(String url) {URL urlConnection = null;HttpURLConnection httpURLConnection = null;try {urlConnection = new URL(url);httpURLConnection = (HttpURLConnection) urlConnection.openConnection();InputStream in = httpURLConnection.getInputStream();byte[] buffer = new byte[1024];int len = 0;ByteArrayOutputStream out = new ByteArrayOutputStream();while ((len = in.read(buffer)) != -1) {out.write(buffer, 0, len);}in.close();out.close();return out.toByteArray();} catch (Exception e) {e.printStackTrace();} finally {httpURLConnection.disconnect();}return null;}

https://www.xjx100.cn/news/3366524.html

相关文章

Redis缓存设计与性能优化【缓存穿透、缓存击穿、缓存雪崩】

Redis缓存设计与性能优化 多级缓存架构缓存设计缓存穿透&#xff08;空数据&#xff09;造成缓存穿透的基本原因有两个&#xff1a;第一&#xff0c; 自身业务代码或者数据出现问题。第二&#xff0c; 一些恶意攻击、 爬虫等造成大量空命中。 缓存穿透问题解决方案&#xff1a;…

Vivado sdk 20:41:22 ERROR : Error occurred while creating hardware platform错误

20:41:22 ERROR : Error occurred while creating hardware platform adrv9009_hw_platform_0 from sysdef java.io.FileNotFoundException: D:\workspace\project2024\project\adrvxxxx (拒绝访问。) at java.io.FileInputStream.open0(Native Method) at java.io.FileInputSt…

Validate failed: Migrations have failed validation

启动项目时flyway报错 出现此情况时通常是对flyway的历史sql文件进行了修改 报错源码阅读&#xff1a; 1.flyway类 此方法在org.flywaydb.core包的Flyway类中 public MigrateResult migrate() throws FlywayException {return execute(new Command<MigrateResult>() …

个人医疗开支预测项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 项目背景 随着医疗成本的持续上涨&#xff0c;个人医疗开支成为一个重要议题。理解影响医疗费用的多种因素对于医疗保险公司、政府机构以及个人…

0基础如何进入IT行业?

进入IT行业对于没有相关背景知识的人来说&#xff0c;可能看起来是一项挑战&#xff0c;但实际上&#xff0c;通过采取一些特定的方法和技巧&#xff0c;这一目标是完全可以实现的。以下是一些建议和策略&#xff0c;帮助初学者顺利进入IT领域。 ### 1. 确定目标和兴趣方向 首…

golang语言系列:Web框架+路由 之 Echo

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是golang语言系列文章&#xff0c;本篇主要对 Echo 框架 的基本使用方法 进行学习 1.Echo是什么 Go 有众多Web框架&#xff0c;Echo 是其中的一个&#xff0c;官网介绍Echo有高性能、可扩展性、极简的特点。使用E…

4.2学习总结

一.java学习总结 (本次java学习总结,主要总结了抽象类和接口的一些知识,和它们之间的联系和区别) 一.抽象类 1.1定义: 抽象类主要用来抽取子类的通用特性&#xff0c;作为子类的模板&#xff0c;它不能被实例化&#xff0c;只能被用作为子类的超类。 2.概括: 有方法声明&…

vivado适用于 UltraScale 和 UltraScale+ 器件的 eFUSE 寄存器访问和编程

FUSE_DNA &#xff1a; 唯一的器件 DNA 每个 UltraScale 器件都有唯一的器件 ID &#xff0c; 称为器件 DNA &#xff0c; 且赛灵思已将此 DNA 编程到器件中。用户无法对 FUSE_DNA 进行编程。 UltraScale 器件具有 96 位 DNA 。您可在 Vivado Design Suite Tcl 控制台中…