一:浏览器打开服务器上的文件
1:读取服务器上面的资源,如果在web层,可以直接使用servletContext,如果在非web层
可以使用类加载器读取文件
2:向浏览器写数据,实际上是把数据封装到response对象上,然后服务器发现response中响应
体中有数据绑定,然后写给浏览器
3:设置响应头,控制浏览器的读取或者解析方式
如下:打开服务器上的图片
/**在页面上查看图片*/
private void viewImage(HttpServletResponse response) throws IOException {
// 设置响应头 在网页上查看图片
response.setHeader("content-type", "image/jpeg");
InputStream in = this.getServletContext().getResourceAsStream(
"/download/1.jpg");
OutputStream out = response.getOutputStream();
int length = 0;
byte[] buf = new byte[1024];
while ((length = in.read(buf)) > 0) {
out.write(buf, 0, length);
}
out.flush();
out.close();
}
二:下载服务器上面的文件
1:下载文件与打开文件类似,都是先读取服务器上面的文件,然后再想浏览器写文件,
只是响应头不同而已。
response.setHeader("content-disposition", "attachment;filename=1.jpg");
/**下载图片*/
private void downloadImage(HttpServletResponse response) throws IOException {
// 设置响应头 在网页上查看图片
response.setHeader("content-disposition", "attachment;filename=1.jpg");
InputStream in = this.getServletContext().getResourceAsStream(
"/download/1.jpg");
OutputStream out = response.getOutputStream();
int length = 0;
byte[] buf = new byte[1024];
while ((length = in.read(buf)) > 0) {
out.write(buf, 0, length);
}
out.flush();
out.close();
}
2:如果需要获取文件的名称,最好先获取服务器上文件的绝对路径,然后在读取,写内容到浏览器。
String path = this.getServletContext().getRealPath("/download/高圆圆.jpg");
private void downloadImage2(HttpServletResponse response){
String path = this.getServletContext().getRealPath("/download/高圆圆.jpg");
String filename = path.substring(path.lastIndexOf("\\")+1);
//设置下载文件响应头
response.setHeader("content-disposition", "attachment;filename="+filename);
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(path);
out = response.getOutputStream();
int len = 0;
byte[] buf = new byte[1024];
while((len = in.read(buf)) > 0){
out.write(buf, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
if(null != in){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(null != out){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
如果文件名为中文时,下载会出现乱码问题,导致无法下载,
这时我们可以先对文件名称进行编码,如下:
String filename = path.substring(path.lastIndexOf("\\")+1);
try {
filename = URLEncoder.encode(filename,"utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
这样乱码问题就解决了!