- 需要的jar包
commons-io commons-io 2.6 commons-fileupload commons-fileupload 1.4 javax.servlet servlet-api 2.5
- 写个表单
-
配置servlet
fileUpLoad cn.pdsu.FileUpLoad fileUpLoad /fileUpLoad 4.业务代码分析(接受上传文件数据)
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { //获取请求内容的输入流 ServletInputStream inputStream = req.getInputStream(); //创建一个缓冲区供读取文件使用 byte[] buffer=new byte[1024000]; //从输入流中,读取buffer个字节,如果一个文件10000b,buffer设置的1000b,那么只需要执行10次就可以读取完 int read = inputStream.read(buffer); //将内容以字符串接收 String str=new String(buffer,0,read); System.out.println(str); }打印str结果如下,上传的图片被分析成字节数据打印
-
主代码
package cn.pdsu; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.List; public class FileUpLoad extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { //先判断上传数据是否是多段数据,只有多段数据才是文件上传的 req.setCharacterEncoding("UTF-8"); if (ServletFileUpload.isMultipartContent(req)){ //工厂实现类 FileItemFactory fileItemFactory=new DiskFileItemFactory(); //用于解析上传数据的工具类 ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); //解析上传的数据,得到每一个表单项fileitem try { List文件下载 流程list= servletFileUpload.parseRequest(req); for (FileItem fileItem: list) { if (fileItem.isFormField()){ //普通表单项 System.out.println("name属性值"+fileItem.getFieldName()); System.out.println("value属性值"+fileItem.getString("UTF-8")); }else { //上传的文件 System.out.println("name属性值"+fileItem.getFieldName()); System.out.println("上传的文件名" +fileItem.getString()); //文件保存位置 File file=new File("e:\"+fileItem.getName()); fileItem.write(file); } } } catch (Exception e) { e.printStackTrace(); } } } } 常用API
response.getOutputStream(); servletContext.getResourceAsStream(); servletContext.getMimeType(); response.setContentType(); response.setHeader("Content-Disposition","attachment; fileName=文件名"); 这个响应头告诉浏览器这是需要下载的,attachment表示附件,也就是下载的一个文件@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.获取要下载的文件名 String downname="smile.jpg"; //2.获取要下载的文件内容(通过servletContext对象获取) ServletContext servletContext=getServletContext(); //获取下载内容类型 String mimeType = servletContext.getMimeType("/file/" + downname); System.out.println("下载的文件类型: "+mimeType); //3.回传前通过响应头告诉客户端返回的数据类型 resp.setContentType(mimeType); InputStream inputStream = servletContext.getResourceAsStream("/file/" + downname); //获取响应的输出流 OutputStream outputStream=resp.getOutputStream(); //4.把下载的文件内容回传给客户端 //读取输入流中的全部数据复制给输出流,输出给客户端 IOUtils.copy(inputStream,outputStream); //还要告诉客户端收到的数据是用于下载使用 resp.setHeader("Content-Disposition" , "attachment; filename=smile.jpg"); }
-



