java 下载url图片_java下载url图片链接
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图片链接相关推荐
- java 字节流 图片_Java下载图片一. 通过字节流传输
Java下载图片 /*生成图片方法*/ public void makeImg(String url,String directory) { try { //创建流 BufferedInputStre ...
- java下载网页所有图片_java 下载网页,图片 | 学步园
/** * 抓取网上的图片 * [延伸]居然都支持下载网页了 * @param imgSrc * @param filePath */ public static void downloadImgBy ...
- java 下载图片流_java下载图片(通用)httpClient,io流
httpClient下载图片 public static void downImage(CloseableHttpClient client, String imgUrl, String savePa ...
- java下载网络文件_java下载网络文件的方法有哪些
下载网络文件的方法有:字节流下载 apache的FileUtils工具包下载 NIO下载 实现代码如下:package com.dsp.rpc.metricelf; import org.apache ...
- java url 协议_Java自定义URL协议
Java提供了对URL协议进行扩展的能力,通过扩展用户可以自定义URL通信协议,JDK默认提供了对HTTP,FTP,JAR,FILE等的实现,而当需要自己定义通信协议的时候,就需要利用JDK提供的对U ...
- java.net.url 兼容_java.net.Url类的应用(网络编程)
一.认识URL 类 URL 代表一个统一资源定位符,它是指向互联网"资源"的指针.资源可以是简单的文件或目录,也可以是更为复杂的对象的引用,例如对数据库或搜索引擎的查询. 简单的可 ...
- java离线安装包_java下载
Java 是由 Sun Microsystems 在 1995 年首先发布的编程语言和计算平台.有许多应用程序和 Web 站点只有在安装 Java 后才能正常工作,而且这样的应用程序和 Web 站点日 ...
- java 图片转jpg图片_JAVA转换jpg图片为渐进式图片
很早之前看到一篇<web前端图片极限优化策略>,了解有jpg分为baseline-jpeg和preogressive-jpeg. 具体的区别如下: baseline-jpeg: 在文件较大 ...
- JAVA MYSQL从数据库中提取图片_java web将图片存到储数据库和从数据库中读取图片...
(Notice:以下所有经验也是我根据网上的经验整理的,如有侵权可以联系我删除,Wx:IT_Ezra,QQ 654303408. 有问题讨论也可联系我,QQ同上.) 一.分析一下基本流程 从前台页面获 ...
- java获取网页编码_java根据URL获取网页编码
由于很多原因,我们要获取网页的编码(多半是写批量抓取的脚本吧...嘻嘻嘻) 注意: 如果你的目的是获取不乱码的网页内容(而不是根据网址发送post请求获取返回值),切记切记,移步这里 先说思路: 有三 ...
最新文章
- python监控数据库_【Python】NavicatPre查询日志监控并转存数据库
- ASP.NET的简单与面向对象开发
- v-model 使用场景和源码学习
- 27. Leetcode 92. 反转链表 II (链表-反转链表)
- sqlserver的基本介绍
- 验证码类,生成验证码
- 枚举windows进程
- 房价预测python_详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索...
- 使用maven构建dubbo服务的可执行jar包
- java 如何添加背景音乐_Java程序怎样添加背景音乐?
- JQueryDOM之设置和获取HTML、文本和值
- 关于WPF 引用字体文件无效果的相关问题
- 在命令行英雄的浏览器大战中,JavaScript令人惊讶地崛起
- 【博客之星】总结和分享是一种习惯
- Elasticsearch顶尖高手系列:高手进阶篇(二)
- 2019 11月 月末总结
- Python爬虫简介
- 《西游记》《封神榜》各路神仙基本层次图,不要再傻傻分不清楚了
- 华为鸿蒙手机用大卡还是小卡,【荣耀3XPro评测】大卡+小卡双3G网络-中关村在线...
- 仿百思不得其姐项目开发(粗略笔记,后期规范排版和更新)
热门文章
- Office 365:如何管理Office 365中的Ophaned Mailbox
- spring boot 限制初始值大小及参数中文详解
- cocos2d-x win8下的环境配置和建立项目
- 通过wifi 连接 adb 到 手机
- Tomcat启动脚本startup.sh分析
- SQL Server 2005 Integration Services (SSIS) (2) - 导入/导出向导
- flex使用FlexPrintJob打印问题
- asp.net C# 实现上传Excel文件导入数据到SQL Server 数据库
- poj 3614(最大流)
- CodeForce 463C Gargari and Bishops(贪心+暴力)