java下载url图片链接

来源:互联网 发布:千县万村农村淘宝计划 编辑:程序博客网 时间:2024/06/02 06:45

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");}}

原创粉丝点击