Springboot Http文件的访问 Url 转换 MultipartFile ,File 转 MultipartFile

简介: Springboot Http文件的访问 Url 转换 MultipartFile ,File 转 MultipartFile

pom.xml

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.2</version>
        </dependency>

MyFileConvertUtil.java

/**
 * @Author: JCccc
 * @Date: 2022-8-25 02:15
 * @Description:
 */
public class MyFileConvertUtil {
    protected static final Logger logger = LoggerFactory.getLogger(MyFileConvertUtil.class);
    /**
     * Url 转换 MultipartFile
     * @param url
     * @param fileName
     * @return
     * @throws Exception
     */
    public static MultipartFile urlToMultipartFile(String url, String fileName) throws Exception {
        logger.info("开始 url 转换 MultipartFile,url={} ,fileName={}",url,fileName);
        File file = null;
        MultipartFile multipartFile = null;
        try {
            HttpURLConnection httpUrl = (HttpURLConnection) new URL(url).openConnection();
            httpUrl.connect();
            logger.info("成功建立httpUrl连接"+httpUrl.toString());
            file = inputStreamToFile(httpUrl.getInputStream(),fileName);
            multipartFile = fileToMultipartFile(file);
            httpUrl.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        logger.info("完成 url 转换 MultipartFile,url={} ,fileName={}",url,fileName);
        return multipartFile;
    }
    /**
     * InputStream 转 File
     * @param ins
     * @param fileName
     * @return
     * @throws Exception
     */
    public static File inputStreamToFile(InputStream ins, String fileName) throws Exception{
        logger.info("开始 InputStream 转换 File,fileName={}",fileName);
        File file = new File(System.getProperty("java.io.tmpdir") + File.separator + fileName);
        OutputStream os = new FileOutputStream(file);
        int bytesRead;
        int len = 8192;
        byte[] buffer = new byte[len];
        while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
            os.write(buffer, 0, bytesRead);
        }
        os.close();
        ins.close();
        logger.info("完成 InputStream 转换 File,fileName={}",fileName);
        return file;
    }
    /**
     * File 转 MultipartFile
     * @param file
     * @return
     */
    public static CommonsMultipartFile fileToMultipartFile(File file) {
        logger.info("fileToMultipartFile文件转换中:"+file.getAbsolutePath());
        FileItemFactory factory = new DiskFileItemFactory(16, null);
        FileItem item=factory.createItem(file.getName(),"text/plain",true,file.getName());
        int bytesRead = 0;
        byte[] buffer = new byte[8192];
        try {
            FileInputStream fis = new FileInputStream(file);
            OutputStream os = item.getOutputStream();
            while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new CommonsMultipartFile(item);
    }
}

使用简例:

    @RequestMapping("/test")
    public void test(@RequestParam String fileUrl)  {
        try {
            File fileAuth = new File(fileUrl);
            //原文件名
            String sourceName = fileAuth.getName();
            //自己起文件名
            String newFileName="JCccc学Java文件名.xlsx";
            MultipartFile file = MyFileConvertUtil.urlToMultipartFile(fileUrl, newFileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
相关文章
|
10天前
|
JSON JavaScript 前端开发
springboot中使用knife4j访问接口文档的一系列问题
本文介绍了在Spring Boot项目中使用Knife4j访问接口文档时遇到的一系列问题及其解决方案。作者首先介绍了自己是一名自学前端的大一学生,熟悉JavaScript和Vue,正在向全栈方向发展。接着详细说明了如何解决Swagger请求404错误,包括升级Knife4j依赖、替换Swagger 2注解为Swagger 3注解以及修改配置类中的代码。最后,针对报JS错误的问题,提供了删除消息转换器代码的解决方法。希望这些内容能对读者有所帮助。
|
14天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
1月前
|
Java 网络架构 Kotlin
kotlin+springboot入门级别教程,教你如何用kotlin和springboot搭建http
本文是一个入门级教程,介绍了如何使用Kotlin和Spring Boot搭建HTTP服务,并强调了Kotlin的空安全性特性。
55 7
kotlin+springboot入门级别教程,教你如何用kotlin和springboot搭建http
|
21天前
|
前端开发 Java 测试技术
深入剖析:Spring Boot Controller中请求处理方法的访问修饰符
【10月更文挑战第21天】 在Spring Boot应用中,Controller类中的请求处理方法通常用于处理HTTP请求。这些方法的访问修饰符(private或public)对方法的行为和可访问性有着重要影响。本文将深入探讨在Controller中使用private和public修饰符的区别,以及它们对Spring MVC框架的影响。
24 8
|
2月前
|
Java Spring
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
|
1月前
url重写重定向所有http网址到https网址
url重写重定向所有http网址到https网址
33 4
|
1月前
|
安全 Java 程序员
【HTTP】认识 URL 和 URL encode
【HTTP】认识 URL 和 URL encode
35 0
|
1月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
53 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
1月前
|
SQL JSON 缓存
你了解 SpringBoot 在一次 http 请求中耗费了多少内存吗?
在工作中常需进行全链路压测并优化JVM参数。通过实验可精确计算特定并发下所需的堆内存,并结合JVM新生代大小估算GC频率,进而优化系统。实验基于SpringBoot应用,利用JMeter模拟并发请求,分析GC日志得出:单次HTTP请求平均消耗约34KB堆内存。复杂环境下,如公司线上环境,单次RPC请求内存消耗可达0.5MB至1MB,揭示了高并发场景下的内存管理挑战。
|
3月前
|
机器学习/深度学习 Ubuntu Linux
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?