根据url获取文件流MultipartFile
常见的url包含网络上一些图片的链接,静态服务器上边的图片地址等等,有时候一些链接内嵌到自己项目中时,由于图片大小或者网站的一些防盗处理,往往无法正确加载图片,因此需要单独做处理;
1.pom文件添加
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency>
2.详细代码
public MultipartFile createFileItem(String url) throws Exception{FileItem item = null;HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();conn.setReadTimeout(30000);conn.setConnectTimeout(30000);// 设置应用程序要从网络连接读取数据conn.setDoInput(true);conn.setRequestMethod("GET");String fileName = "";if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {InputStream is = conn.getInputStream();//获取文件名称String newUrl = conn.getURL().getFile();if (newUrl != null || newUrl.length() <= 0) {newUrl = java.net.URLDecoder.decode(newUrl, "UTF-8");int pos = newUrl.indexOf('?');if (pos > 0) {newUrl = newUrl.substring(0, pos);}pos = newUrl.lastIndexOf('/');fileName = newUrl.substring(pos + 1);}//此处获取两次,是因为如果只获取一次的话,获取type类型时,文件大小会损坏变小,所以重新获取一次BufferedInputStream bis = null;HttpURLConnection conn1 = (HttpURLConnection) new URL(url).openConnection();bis = new BufferedInputStream(conn1.getInputStream());String type = HttpURLConnection.guessContentTypeFromStream(bis);FileItemFactory factory = new DiskFileItemFactory(16, null);String textFieldName = "downloadFile"; //此处任务取值if(!fileName.contains(".") && type != null){fileName = fileName + "." + FileUtils.getFileType(type);}logger.info("文件名为:" + fileName + " 大小" + (conn.getContentLength()/1024)+"KB" + " contentType=" + type);item = factory.createItem(textFieldName, type, false, fileName);OutputStream os = item.getOutputStream();int bytesRead;byte[] buffer = new byte[1024 * conn.getContentLength()];while ((bytesRead = is.read(buffer, 0, buffer.length)) != -1) {os.write(buffer, 0, bytesRead);}os.close();is.close();}if (item != null) {return new CommonsMultipartFile(item);}return null;}
3.工具类
/*** 根据content-type获取文件后缀* @param fileContentType* @return*/public static String getFileType(String fileContentType){switch (fileContentType) {case "image/tiff": return "tif";case "image/fax": return "fax";case "image/gif": return "gif";case "image/jpeg": return "jpg";case "image/png": return "png";case "image/vnd.wap.wbmp": return "wbmp";case "audio/x-wav": return "webp";default: return "jpg";}}
在网上查了一些资料,都不是很详细,因此整理一下方便以后使用,可以根据上述代码获取url文件名,文件后缀,文件大小等。
注:如果url中文件自带后缀名,如4.png之类的,是不需要使用上述工具类的,可以直接获取到。
根据url获取文件流MultipartFile相关推荐
- java根据url获取文件流
最近的一个需求需要根据一个mp3的链接获取文件流上传到内部的存储平台, 记录一下获取文件流的代码吧. pom文件 <dependency><groupId>org.apache ...
- Java 获取url地址文件流
/*** 根据url下载文件流* @param urlStr* @return*/ public static InputStream getInputStreamFromUrl(String url ...
- java获取url文件格式_本地文件/url获取文件类型
package com.cjw.baidu.ocr; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringU ...
- 通过FeignClient获取文件流 steam is close问题
通过FeignClient获取文件流 steam is close问题 inputstream.read 报错 steam is close 原因:idea debug启动导致 解决办法:直接启动
- 任意java程序都可以是servlet吗_C#从Java servlet中获取文件流实现任意文件下载
目的: 从C#创建的客户端中向Java创建的servlet提交请求(不知道这是否算作严格的CS架构),servet返回一个文件流( 任意格式的文件 ),然后通过C#获取该文件流并保存到本地,使得文件可 ...
- C# 根据url获取文件流流
/// <summary>/// 根据url获取流/// </summary>/// <param name="url">路径</para ...
- Feign接口获取文件流问题
文件下载 @GetMapping(value = "/v1/files/**/{file_name:.+}")public void downFile(@PathVariable( ...
- java根据远程URL获取文件类型
通过给定url中获取文件文件类型,开始想到的方法是通过在url中切割获取,如以下url,可以通过切割字符串的方式获取到文件类型是jpg格式的: http://bpic.588ku.com/elemen ...
- react集成react-pdf获取文件流预览下载pdf,展示电子签章
1.下载依赖包 代码如下(示例): npm install react-pdf 2.引入依赖包 代码如下(示例): import { Document, Page } from 'react-pdf' ...
最新文章
- Android:项目关联Library
- 面向对象之__isset__unset
- 多进程/多线程同时向一个文件中写入日志如何避免冲突?
- 原创 Reflector 8.1 反激活
- windows 10下载链接
- 接口 Closeable
- MouseColor | 颜色获取及转换工具
- 【读书笔记】Java基础学习之目录
- 谷歌发布 Chrome 91,修复32个漏洞
- json-lib解析json之二维JSONArray
- Linux系统安装与使用基础实验报告
- python +appium实现原理_Appium工作原理
- fedora14更新yum源
- 仿百度文库,office转pdf核心转换功能
- python 正则表达式的应用
- 使用poi操作word
- VUE报错:Avoid mutating a prop directly since the value will be overwwritten whenever the parent及解决方案
- 详解Quartz中的注解:@DisallowConcurrentExecution和@PersistJobDataAfterExecution
- 发布一个flv视频下载工具(支持一边下一边播放)
- 注册机编写器 Keymake v1.73 下载