效果
Servet代码
package com.liang;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
@WebServlet("/imgservlet")
public class ImgServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
//前端传入的name值
String url = request.getParameter("filename");
long startTime = System.currentTimeMillis();
URL imgURL = new URL(url.trim());//转换URL
HttpURLConnection urlConn = (HttpURLConnection) imgURL.openConnection();//构造连接
urlConn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36");
urlConn.connect();
System.out.println(CatchIMG.class.toString() + ":获取连接=" + urlConn.getResponseMessage());
if (urlConn.getResponseCode() == 200) {//返回的状态码是200 表示成功
InputStream ins = urlConn.getInputStream(); //获取输入流,从网站读取数据到 内存中
//获取写入tomcat服务器资源下的路径
ServletContext servletContext = this.getServletContext();
//realPath是服务器路径
String realPath = servletContext.getRealPath("/img/");
String filename = String.valueOf(System.currentTimeMillis());
OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(realPath+filename + ".jpg")));
int len = 0;
byte[] buff = new byte[1024 * 10];//10k缓冲流 视你内存大小而定咯
while (-1 != (len = (new BufferedInputStream(ins)).read(buff))) {//长度保存到len,内容放入到 buff
out.write(buff, 0, len);//将图片数组内容写入到图片文件
// System.out.println(CatchIMG.class.toString()+":"+len+"byte已经写入到文件中,内容: "+new String(buff));
}
urlConn.disconnect();
ins.close();
out.close();
System.out.println(CatchIMG.class.toString() + ":获取图片完成,耗时=" + ((System.currentTimeMillis() - startTime) / 1000) + "s");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}