上传文件
Posted qfdy123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上传文件相关的知识,希望对你有一定的参考价值。
package com.zy.ImageServlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Collection; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; /** * Servlet implementation class ImageServlet */ @WebServlet("/ImageServlet") @MultipartConfig //可接多功能表单请求 public class ImageServlet extends HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType("text/html;charset=utf-8"); //获取真实路径---存储路径 项目逻辑路径是[/image] String savePath = request.getServletContext().getRealPath("/image"); System.out.println("真实路径是"+savePath); //获取上传的文件集合 Collection<Part> parts = request.getParts(); //上传单个文件 if (parts.size()==1) //Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。 //Part part = parts[0];//从上传的文件集合中获取Part对象 Part part = request.getPart("file");//通过表单file控件(<input type="file" name="file">)的名字直接获取Part对象 //Servlet3没有提供直接获取文件名的方法,需要从请求头中解析出来 //获取请求头,请求头的格式:form-data; name="file"; filename="snmp4j--api.zip" String header = part.getHeader("content-disposition"); //获取文件名 String fileName = getFileName(header); //把文件写到指定路径 // System.out.println("这个是啥:"+File.separator); System.out.println("这个是啥:"+header+"\t"+fileName); //D:\workspace37\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\imageUp\image\110.jpg part.write(savePath+File.separator+fileName); else //一次性上传多个文件 for (Part part : parts) //循环处理上传的文件 //获取请求头,请求头的格式:form-data; name="file"; filename="snmp4j--api.zip" String header = part.getHeader("content-disposition"); //获取文件名 String fileName = getFileName(header); //把文件写到指定路径 System.out.println("这个是啥:"+File.separator); part.write(savePath+File.separator+fileName); PrintWriter out = response.getWriter(); out.println("上传成功"); out.flush(); out.close(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException // TODO Auto-generated method stub doGet(request, response); /** * 根据请求头解析出文件名 * 请求头的格式:火狐和google浏览器下:form-data; name="file"; filename="snmp4j--api.zip" * IE浏览器下:form-data; name="file"; filename="E:\snmp4j--api.zip" * @param header 请求头 * @return 文件名 */ //请求头的格式【一堆字符串,包含文件名,我们干啥,在这堆字符串中截取出文件名】: //form-data; name="file"; filename="snmp4j--api.zip" public String getFileName(String header) /** * String[] tempArr1 = header.split(";");代码执行完之后,在不同的浏览器下,tempArr1数组里面的内容稍有区别 * 火狐或者google浏览器下:tempArr1=form-data,name="file",filename="snmp4j--api.zip" * IE浏览器下:tempArr1=form-data,name="file",filename="E:\snmp4j--api.zip" */ String[] tempArr1 = header.split(";"); /** *火狐或者google浏览器下:tempArr2=filename,"snmp4j--api.zip" *IE浏览器下:tempArr2=filename,"E:\snmp4j--api.zip" */ //filename="snmp4j--api.zip" String[] tempArr2 = tempArr1[2].split("="); //获取文件名,兼容各种浏览器的写法 String fileName = tempArr2[1].substring(tempArr2[1].lastIndexOf("\\")+1).replaceAll("\"", ""); return fileName;
以上是关于上传文件的主要内容,如果未能解决你的问题,请参考以下文章