常见的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相关推荐

  1. java根据url获取文件流

    最近的一个需求需要根据一个mp3的链接获取文件流上传到内部的存储平台, 记录一下获取文件流的代码吧. pom文件 <dependency><groupId>org.apache ...

  2. Java 获取url地址文件流

    /*** 根据url下载文件流* @param urlStr* @return*/ public static InputStream getInputStreamFromUrl(String url ...

  3. java获取url文件格式_本地文件/url获取文件类型

    package com.cjw.baidu.ocr; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringU ...

  4. 通过FeignClient获取文件流 steam is close问题

    通过FeignClient获取文件流 steam is close问题 inputstream.read 报错 steam is close 原因:idea debug启动导致 解决办法:直接启动

  5. 任意java程序都可以是servlet吗_C#从Java servlet中获取文件流实现任意文件下载

    目的: 从C#创建的客户端中向Java创建的servlet提交请求(不知道这是否算作严格的CS架构),servet返回一个文件流( 任意格式的文件 ),然后通过C#获取该文件流并保存到本地,使得文件可 ...

  6. C# 根据url获取文件流流

    /// <summary>/// 根据url获取流/// </summary>/// <param name="url">路径</para ...

  7. Feign接口获取文件流问题

    文件下载 @GetMapping(value = "/v1/files/**/{file_name:.+}")public void downFile(@PathVariable( ...

  8. java根据远程URL获取文件类型

    通过给定url中获取文件文件类型,开始想到的方法是通过在url中切割获取,如以下url,可以通过切割字符串的方式获取到文件类型是jpg格式的: http://bpic.588ku.com/elemen ...

  9. react集成react-pdf获取文件流预览下载pdf,展示电子签章

    1.下载依赖包 代码如下(示例): npm install react-pdf 2.引入依赖包 代码如下(示例): import { Document, Page } from 'react-pdf' ...

最新文章

  1. Android:项目关联Library
  2. 面向对象之__isset__unset
  3. 多进程/多线程同时向一个文件中写入日志如何避免冲突?
  4. 原创 Reflector 8.1 反激活
  5. windows 10下载链接
  6. 接口 Closeable
  7. MouseColor | 颜色获取及转换工具
  8. 【读书笔记】Java基础学习之目录
  9. 谷歌发布 Chrome 91,修复32个漏洞
  10. json-lib解析json之二维JSONArray
  11. Linux系统安装与使用基础实验报告
  12. python +appium实现原理_Appium工作原理
  13. fedora14更新yum源
  14. 仿百度文库,office转pdf核心转换功能
  15. python 正则表达式的应用
  16. 使用poi操作word
  17. VUE报错:Avoid mutating a prop directly since the value will be overwwritten whenever the parent及解决方案
  18. 详解Quartz中的注解:@DisallowConcurrentExecution和@PersistJobDataAfterExecution
  19. 发布一个flv视频下载工具(支持一边下一边播放)
  20. 注册机编写器 Keymake v1.73 下载

热门文章

  1. oracle 数据去重方法
  2. 嵌入式 常见的undefined reference to涉及的链接问题
  3. 第五讲:独立键盘、矩阵键盘的检测原理及实现(郭天祥)
  4. 腾讯大举增持拼多多股权,目标或是阿里巴巴,马云能安心么?
  5. Python中文件的读写操作
  6. 移动端九宫格转盘抽奖vue组件
  7. 自学实践前后端项目4 MMall商城 3
  8. 2021年高压电工找解析及高压电工实操考试视频
  9. openlayers 接入 geojson 实现行政区域边界绘制
  10. oracle ebs 笔记