java 下载url图片_java下载url图片链接
1.從之前寫(xiě)的一篇中改寫(xiě)了代碼,從遠(yuǎn)程的url鏈接中下載圖片,并對(duì)各種瀏覽器的中文文件名進(jìn)行展示
/**
* 根據(jù)url路徑下載圖片
* @param filename 處理下載時(shí)顯示設(shè)置好的中文名 eg:張三的照片.jpg
* @param path 要保存在本地的臨時(shí)路徑(下載之后會(huì)將保存在此處的圖片刪除)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.得到下載文件的名稱(chēng).必須處理亂碼.
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);
// 下載設(shè)置
// 1.設(shè)置mimetype類(lèi)型
String mimeType = new MimetypesFileTypeMap().getContentType(file);
response.setContentType(mimeType); // 根據(jù)文件名獲取這種文件的mimeType值,設(shè)置到http響應(yīng)頭中。
// 以下代碼解決了瀏覽器顯示下載文件名亂碼問(wèn)題
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.設(shè)置響應(yīng)頭 Content-Dispositon.
response.setHeader("Content-Disposition", "attachment;filename="
+ viewfilename);
if (file.exists()) {
// 存在
// 3.通過(guò)輸入流將這個(gè)文件內(nèi)容讀取出來(lái),通過(guò)response獲取輸出流,寫(xiě)回到瀏覽器.
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("下載資源名稱(chēng)轉(zhuǎn)碼異常");
}
catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("下載資源不存在");
}
catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("下載資源流異常");
}
}
2.用到的轉(zhuǎn)碼工具類(lèi)
import java.io.UnsupportedEncodingException;
/**
* 編碼解碼工具類(lèi)
* @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");
}
}
總結(jié)
以上是生活随笔為你收集整理的java 下载url图片_java下载url图片链接的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 深入理解Hadoop之HDFS架构
- 下一篇: java多态替换switch_第1章 重