1.下面是一个servlet,在dopost方法中处理图片上传
import java.io.IOException;
import java.io.PrintWriter;
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 org.apache.log4j.Logger;
import com.bluetorch.image.service.ImageService;
/**
* Servlet implementation class RegisterController
*/
@WebServlet(name = "ImageServlet", urlPatterns = "/Image")
public class ImageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Logger logger = Logger.getLogger(this.getClass());
/**
* @see HttpServlet#HttpServlet()
*/
public ImageServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/xml");
String url = new Upload(request).getUrl();
System.out.println(url);
}
@Override
public void init() throws ServletException {
}
}
2.Upload类
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
public class Upload {
Logger logger = null;
HttpServletRequest request = null;
public Upload(HttpServletRequest request){
this.request = request;
this.logger = Logger.getLogger(Upload.class);
}
//得到图片文件的路径
public String getUrl() {
String paramValue = "";
String folder = "/upload";
String path = request.getSession().getServletContext().getRealPath(folder);
logger.debug("<path>" + path);
System.out.println("<path>" + path);
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File(path));
factory.setSizeThreshold(1024*1024);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1024*1024*10);//最大上传10M
String name = null;
String filename = null;
try {
List<FileItem> itemList = (List<FileItem>) upload.parseRequest(request);
for(FileItem item : itemList){
name = item.getFieldName();
if(item.isFormField()){
}else{
String value = item.getName();
if("".equals(value)){
return null;
}
int start = value.lastIndexOf("\\");
filename = value.substring(start + 1);
OutputStream out = new FileOutputStream(new File(path, filename));
InputStream in;
in = item.getInputStream();
int length = 0;
byte[] buf = new byte[1024];
logger.debug("获取上传文件的总共的容量:" + item.getSize());
// in.read(buf) 每次读到的数据存放在 buf 数组中
while ((length = in.read(buf)) != -1) {
// 在 buf 数组中 取出数据 写到 (输出流)磁盘上
out.write(buf, 0, length);
}
in.close();
out.close();
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return getDefaultUrl(filename, folder);
}
//得到系统图片的路径
public String getDefaultUrl(String img, String folder){
StringBuffer sb = new StringBuffer();
sb.append("http://");
// sb.append(request.getLocalAddr());
sb.append(request.getServerName());
// sb.append("域名");
sb.append(":");
sb.append(request.getServerPort());
sb.append(request.getContextPath());
sb.append(folder);
sb.append("/");
sb.append(img);
logger.debug("<path>" + sb.toString());
return sb.toString();
}
}
这样就完成了,但是我在部署的时候出现了一些问题,如果用IDE工具部署的话,path的路径指向的是IDE工具生成的一个临时文件夹,得到的图片路径找不到图片。
直接用tomcat部署的话,就没问题了
本文介绍了一个使用Servlet处理图片上传的示例代码。该示例通过Apache Commons FileUpload库解析请求中的文件,并将其保存到服务器指定目录。同时展示了如何获取上传文件的路径。
510

被折叠的 条评论
为什么被折叠?



