有时我们用浏览器打开一张图片时,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;

/**
* Servlet implementation class DownLoadNetServlet
*/
@WebServlet("/DownLoadNet")
public class DownLoadNetServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public DownLoadNetServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String fileName = "d6ca7bcb0a46f21f46612acbfd246b600d33aed5.jpg";
// TODO Auto-generated method stub
// 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();
}
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
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;

/**
* Servlet implementation class DownLoadNetServlet
*/
@WebServlet("/DownLoadNet")
public class DownLoadNetServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public DownLoadNetServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String fileName = "d6ca7bcb0a46f21f46612acbfd246b600d33aed5.jpeg";
// TODO Auto-generated method stub
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();
}
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}

}

总结

从上述代码中可以看出,预览图片和下载图片都进行了使用文件流的形式进行传输,如果所预览的图片为远程的图片,那么就使用HttpUrlConnection进行获取图片的流,同时将该流传输到前台浏览器,达到中转效果。
而下载,则是依靠一下两行代码

1
2
response.setContentType(getServletContext().getMimeType(fileName));
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);

其中第一句是判别文件的MIME类型的,第二句则是关键,在servlet中添加这两句就会使浏览器进行下载文件。



后台      servlet

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!