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();
        }
    }
相关文章
|
7天前
|
缓存 监控 Java
优化Spring Boot应用的数据库访问性能
优化Spring Boot应用的数据库访问性能
|
8天前
|
缓存 监控 Java
优化Spring Boot应用的数据库访问性能
优化Spring Boot应用的数据库访问性能
|
12天前
|
Java
自主定义访问路径-----SpringBoot自主定义静态资源访问路径的方法
自主定义访问路径-----SpringBoot自主定义静态资源访问路径的方法
|
19天前
|
前端开发 JavaScript 网络协议
Springboot中为什么你能通过一小段代码来访问网页?
Springboot中为什么你能通过一小段代码来访问网页?
27 7
|
22天前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
33 5
|
27天前
|
JavaScript
【干货】js判断url是否是合法http/https
【干货】js判断url是否是合法http/https
58 1
|
17天前
|
Java API Spring
Spring Boot中使用Feign进行HTTP请求
Spring Boot中使用Feign进行HTTP请求
|
17天前
|
Java
SpringBoot修改访问路径
SpringBoot修改访问路径
|
21天前
|
JavaScript 应用服务中间件 nginx
nginx配置解决vue刷新404、swagger 页面访问(springboot+vue项目)
nginx配置解决vue刷新404、swagger 页面访问(springboot+vue项目)
22 0
|
1月前
|
存储 运维 Serverless
Serverless 使用OOS将http文件转存到对象存储
阿里云OOS提供了一种高效、灵活的解决方案,用于自动化HTTP文件到对象存储的转存。通过OOS,用户可以使用函数计算FC执行Python脚本,直接将文件从HTTP源转移到OSS,无需本地存储或额外ECS实例,降低了成本,提高了效率,并减少了错误。实践步骤包括创建OOS模板并在FC上运行。使用此功能需开通FC服务,创建RAM角色并授权访问OSS。附录中提供了示例模板和Python脚本说明。
64 0

热门文章

最新文章