1.从之前写的一篇中改写了代码,从远程的url链接中下载图片,并对各种浏览器的中文文件名进行展示

/**

* 根据url路径下载图片

* @param filename 处理下载时显示设置好的中文名 eg:张三的照片.jpg

* @param path 要保存在本地的临时路径(下载之后会将保存在此处的图片删除)eg: d:/image

* @param url 图片链接 eg: http://photo.baidu.com/111.jpg

* @param request

* @param response

*/

public static void downloadFileFromImageServer(String filename, String path, String url, HttpServletRequest request, HttpServletResponse response) {

try {

// 1.得到下载文件的名称.必须处理乱码.

filename = GetEncode.transcode(filename);

// 2.从upload目录下查找filename文件是否存在。

URL httpurl = new URL(url);

String fileName = IDUtil.getUUID() + url.substring(url.lastIndexOf("."));

File file = new File(path + fileName);

FileUtils.copyURLToFile(httpurl, file);

// 下载设置

// 1.设置mimetype类型

String mimeType = new MimetypesFileTypeMap().getContentType(file);

response.setContentType(mimeType); // 根据文件名获取这种文件的mimeType值,设置到http响应头中。

// 以下代码解决了浏览器显示下载文件名乱码问题

String agent = request.getHeader("User-agent");

String viewfilename = null;

if (agent.contains("MSIE")) {

// IE浏览器

viewfilename = URLEncoder.encode(filename, "utf-8");

} else if (agent.contains("Firefox")) {

// 火狐浏览器

BASE64Encoder base64Encoder = new BASE64Encoder();

viewfilename = "=?utf-8?B?"

+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";

} else if (agent.contains("Chrome")) {

// google浏览器

viewfilename = URLEncoder.encode(filename, "utf-8");

} else {

// 其它浏览器

viewfilename = URLEncoder.encode(filename, "utf-8");

}

// 2.设置响应头 Content-Dispositon.

response.setHeader("Content-Disposition", "attachment;filename="

+ viewfilename);

if (file.exists()) {

// 存在

// 3.通过输入流将这个文件内容读取出来,通过response获取输出流,写回到浏览器.

FileInputStream fis = new FileInputStream(file);

OutputStream os = response.getOutputStream();

int len = -1;

byte[] b = new byte[1024];

while ((len = fis.read(b)) != -1) {

os.write(b, 0, len);

os.flush();

}

try {

fis.close();

os.close();

file.delete();

}

catch (IOException e1) {

e1.printStackTrace();

}

} else {

// 不存在

throw new RuntimeException("下载资源不存在");

}

}

catch (UnsupportedEncodingException e) {

e.printStackTrace();

throw new RuntimeException("下载资源名称转码异常");

}

catch (FileNotFoundException e) {

e.printStackTrace();

throw new RuntimeException("下载资源不存在");

}

catch (IOException e) {

e.printStackTrace();

throw new RuntimeException("下载资源流异常");

}

}

2.用到的转码工具类

import java.io.UnsupportedEncodingException;

/**

* 编码解码工具类

* @author wugang

*

*/

public class GetEncode {

public static String transcode(String str, String sourceCharset, String targetCharset){

if (str == null)

return null;

String retStr = str;

byte b[];

try{

b = str.getBytes(sourceCharset);

for(int i=0; i < b.length; i++){

byte b1 = b[i];

if(b1 == 63)

break;

else if(b1 > 0)

continue;

else if(b1 < 0){

retStr = new String(b, targetCharset);

break;

}

}

b = retStr.getBytes();

}catch(UnsupportedEncodingException e){

e.printStackTrace();

}

return retStr;

}

/**

* 将字符串先按ISO8859-1解码,再按UTF-8编码

* @param str

* @return

*/

public static String transcode(String str){

if(str == null || "".equals(str.trim()))

return "";

return transcode(str,"ISO8859-1", "UTF-8");

}

}

java 下载url图片_java下载url图片链接相关推荐

  1. java 字节流 图片_Java下载图片一. 通过字节流传输

    Java下载图片 /*生成图片方法*/ public void makeImg(String url,String directory) { try { //创建流 BufferedInputStre ...

  2. java下载网页所有图片_java 下载网页,图片 | 学步园

    /** * 抓取网上的图片 * [延伸]居然都支持下载网页了 * @param imgSrc * @param filePath */ public static void downloadImgBy ...

  3. java 下载图片流_java下载图片(通用)httpClient,io流

    httpClient下载图片 public static void downImage(CloseableHttpClient client, String imgUrl, String savePa ...

  4. java下载网络文件_java下载网络文件的方法有哪些

    下载网络文件的方法有:字节流下载 apache的FileUtils工具包下载 NIO下载 实现代码如下:package com.dsp.rpc.metricelf; import org.apache ...

  5. java url 协议_Java自定义URL协议

    Java提供了对URL协议进行扩展的能力,通过扩展用户可以自定义URL通信协议,JDK默认提供了对HTTP,FTP,JAR,FILE等的实现,而当需要自己定义通信协议的时候,就需要利用JDK提供的对U ...

  6. java.net.url 兼容_java.net.Url类的应用(网络编程)

    一.认识URL 类 URL 代表一个统一资源定位符,它是指向互联网"资源"的指针.资源可以是简单的文件或目录,也可以是更为复杂的对象的引用,例如对数据库或搜索引擎的查询. 简单的可 ...

  7. java离线安装包_java下载

    Java 是由 Sun Microsystems 在 1995 年首先发布的编程语言和计算平台.有许多应用程序和 Web 站点只有在安装 Java 后才能正常工作,而且这样的应用程序和 Web 站点日 ...

  8. java 图片转jpg图片_JAVA转换jpg图片为渐进式图片

    很早之前看到一篇<web前端图片极限优化策略>,了解有jpg分为baseline-jpeg和preogressive-jpeg. 具体的区别如下: baseline-jpeg: 在文件较大 ...

  9. JAVA MYSQL从数据库中提取图片_java web将图片存到储数据库和从数据库中读取图片...

    (Notice:以下所有经验也是我根据网上的经验整理的,如有侵权可以联系我删除,Wx:IT_Ezra,QQ 654303408. 有问题讨论也可联系我,QQ同上.) 一.分析一下基本流程 从前台页面获 ...

  10. java获取网页编码_java根据URL获取网页编码

    由于很多原因,我们要获取网页的编码(多半是写批量抓取的脚本吧...嘻嘻嘻) 注意: 如果你的目的是获取不乱码的网页内容(而不是根据网址发送post请求获取返回值),切记切记,移步这里 先说思路: 有三 ...

最新文章

  1. python监控数据库_【Python】NavicatPre查询日志监控并转存数据库
  2. ASP.NET的简单与面向对象开发
  3. v-model 使用场景和源码学习
  4. 27. Leetcode 92. 反转链表 II (链表-反转链表)
  5. sqlserver的基本介绍
  6. 验证码类,生成验证码
  7. 枚举windows进程
  8. 房价预测python_详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索...
  9. 使用maven构建dubbo服务的可执行jar包
  10. java 如何添加背景音乐_Java程序怎样添加背景音乐?
  11. JQueryDOM之设置和获取HTML、文本和值
  12. 关于WPF 引用字体文件无效果的相关问题
  13. 在命令行英雄的浏览器大战中,JavaScript令人惊讶地崛起
  14. 【博客之星】总结和分享是一种习惯
  15. Elasticsearch顶尖高手系列:高手进阶篇(二)
  16. 2019 11月 月末总结
  17. Python爬虫简介
  18. 《西游记》《封神榜》各路神仙基本层次图,不要再傻傻分不清楚了
  19. 华为鸿蒙手机用大卡还是小卡,【荣耀3XPro评测】大卡+小卡双3G网络-中关村在线...
  20. 仿百思不得其姐项目开发(粗略笔记,后期规范排版和更新)

热门文章

  1. Office 365:如何管理Office 365中的Ophaned Mailbox
  2. spring boot 限制初始值大小及参数中文详解
  3. cocos2d-x win8下的环境配置和建立项目
  4. 通过wifi 连接 adb 到 手机
  5. Tomcat启动脚本startup.sh分析
  6. SQL Server 2005 Integration Services (SSIS) (2) - 导入/导出向导
  7. flex使用FlexPrintJob打印问题
  8. asp.net C# 实现上传Excel文件导入数据到SQL Server 数据库
  9. poj 3614(最大流)
  10. CodeForce 463C Gargari and Bishops(贪心+暴力)