有时我们用浏览器打开一张图片时,IE默认是下载图片,QQ浏览器、360浏览器、google浏览器等都是在线预览,然而当我们需要把这张图片下载下来观看时该怎么办呢?今天就学习一下浏览器访问资源文件下载文件和下载资源文件。
示例图片

图片地址
http://7xi8d6.com1.z0.glb.clouddn.com/20171227115959_lmlLZ3_Screenshot.jpeg
预览文件
在浏览器中输入图片的地址即可使用浏览器在线进行预览,还有一种方式就是经过servlet进行预览
servlet代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| package com.hyf.servlet;
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL;
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
@WebServlet("/DownLoadNet") public class DownLoadNetServlet extends HttpServlet { private static final long serialVersionUID = 1L;
public DownLoadNetServlet() { super(); }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String fileName = "d6ca7bcb0a46f21f46612acbfd246b600d33aed5.jpg";
System.out.println("文件类型:"+getServletContext().getMimeType(fileName));
OutputStream outputStream = response.getOutputStream(); URL url = new URL("http://7xi8d6.com1.z0.glb.clouddn.com/20171227115959_lmlLZ3_Screenshot.jpeg"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.connect(); if (connection.getResponseCode() == 200) { InputStream is = connection.getInputStream(); byte[] bytes = new byte[1024]; int len = 0; while ((len = is.read(bytes)) != -1) { outputStream.write(bytes, 0, len); } outputStream.flush(); is.close(); outputStream.close(); } }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
}
|
下载文件
如果不需要预览文件,直接进行下载图片,servlet代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| package com.hyf.servlet;
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL;
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
@WebServlet("/DownLoadNet") public class DownLoadNetServlet extends HttpServlet { private static final long serialVersionUID = 1L;
public DownLoadNetServlet() { super(); }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String fileName = "d6ca7bcb0a46f21f46612acbfd246b600d33aed5.jpeg"; response.setContentType(getServletContext().getMimeType(fileName)); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); System.out.println("文件类型:"+getServletContext().getMimeType(fileName));
OutputStream outputStream = response.getOutputStream(); URL url = new URL("http://7xi8d6.com1.z0.glb.clouddn.com/20171227115959_lmlLZ3_Screenshot.jpeg"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.connect(); if (connection.getResponseCode() == 200) { InputStream is = connection.getInputStream(); byte[] bytes = new byte[1024]; int len = 0; while ((len = is.read(bytes)) != -1) { outputStream.write(bytes, 0, len); } outputStream.flush(); is.close(); outputStream.close(); } }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
}
|
总结
从上述代码中可以看出,预览图片和下载图片都进行了使用文件流的形式进行传输,如果所预览的图片为远程的图片,那么就使用HttpUrlConnection进行获取图片的流,同时将该流传输到前台浏览器,达到中转效果。
而下载,则是依靠一下两行代码
1 2
| response.setContentType(getServletContext().getMimeType(fileName)); response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
|
其中第一句是判别文件的MIME类型的,第二句则是关键,在servlet中添加这两句就会使浏览器进行下载文件。