servlet 实现下载图片
package Servlets;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.*;
public class CouponDownload extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response){
try{
String fname = "coupon_all.jpg";
response.setCharacterEncoding("utf-8");
fname = java.net.URLEncoder.encode(fname, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename="+fname);
response.setContentType("image/jpeg");//定义输出类型
}catch (Exception e){
System.out.println(e);
}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException{
doGet(request,response);
}
}
//没有预览 - 看到最后面,我提供了个完全正常的。
Servlet实现将图片写入到网页和实现图片下载的功能
package donghongyujava.servlet;
import java.io.File;
public class ShowImage extends HttpServlet {
/**
* Constructor of the object.
*/
public ShowImage() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// showImage(request, response);
downlodeImage(request, response);
}
public void showImage(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 读取方式
// response.setContentType("application/zip");
response.setContentType("image/jpeg");
// 获取图片绝对路径
String path = this.getServletContext().getRealPath("/");
File file = new File(path + "/images/WIN_20131027_214421.JPG");
// 创建文件输入流
FileInputStream is = new FileInputStream(file);
// 响应输出流
ServletOutputStream out = response.getOutputStream();
// 创建缓冲区
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
is.close();
out.flush();
out.close();
}
public void downlodeImage(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 获取图片绝对路径
String path = this.getServletContext().getRealPath("/");
File file = new File(path + "/images/WIN_20131027_214421.JPG");
//设置头信息,内容处理的方式,attachment以附件的形式打开,就是进行下载,并设置下载文件的命名
response.setHeader("Content-Disposition","attachment;filename="+file.getName());
// 创建文件输入流
FileInputStream is = new FileInputStream(file);
// 响应输出流
ServletOutputStream out = response.getOutputStream();
// 创建缓冲区
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
is.close();
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
如果要实现下载网络上用URL指定的图片呢:
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
public class DynamicGetURLImage {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//图片的http全路径
String imgurl = "http://xxx:8080/xxx/seccode.php?update=6689";
URL url = new URL(imgurl);
BufferedInputStream in = new BufferedInputStream(url.openStream());
//保存的图片文件名
File img = new File("img.jpg");
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(img));
byte[] buf = new byte[2048];
while(in.read(buf) != -1)
{
out.write(buf);
}
in.close();
out.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
最终代码:
package com.hwm.shown.servlet;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URLConnection;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class downloadImage
*/
@WebServlet("/downloadImage")
public class downloadImage extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public downloadImage() {
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
/**
*
*/
response.setCharacterEncoding("utf-8");
URI uri = null;
URLConnection connection = null;// 获取URLConnection对象
BufferedInputStream in = null;
ByteArrayOutputStream out = null;
String url=request.getParameter("url");
String houzui=url.substring(url.lastIndexOf("."), url.length());
// System.out.println(houzui);
// System.out.println(new Date().getTime());
if(url!=null){
try {
uri = new URI(url);// 创建URI对象
connection = uri.toURL().openConnection();
in = new BufferedInputStream(connection.getInputStream());
out = new ByteArrayOutputStream();
byte[] buffer = new byte[in.available()];//1024
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
byte[] data = out.toByteArray(); //! 一定要先转换成字节数组
out.close();
// 这里进行你想要的其他操作
response.setHeader("Content-Disposition", "attachment;filename="+Long.toString(new Date().getTime())+houzui );
// response.setContentType("image/jpeg");//定义输出类型 可不设置
// 响应输出流
ServletOutputStream out2 = response.getOutputStream();
out2.write(data, 0, data.length);
in.close();
out2.flush();
out2.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {}
}
}
}
}
/**
* @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);
}
}
测试例子: http://localhost:8080/test1/downloadImage?url=http://cdn.iknow.bdimg.com/static/common/pkg/common_z_63fa369.png