Jsp文件上传技术

xiaoxiao2021-02-28  96

实现文件上传的基本套路 FileItemFactory f=new DiskFileItemFactory(1024*8,new * File(“d:/a”));//缓存,用于存放临时文件 ServletFileUpload upload=new * ServletFileUpload(f); List list=upload.parseRequest(request); * for(FileItem f:list){ //FileItem: 普通表单组件、file组件中的文件名、file组件所上传的文件数据 * //分别处理每一个FileItem } up.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>文件上传引例</title> </head> <body> <h2>引例---展示我们自己写底代码实现文件上传比较困难</h2> <!-- 注意,具有file组件的表单,form标记必须添加属性:enctype="multipart/form-data",否则只会当成POST1方式提交(文件名可以上传,但不会提交文件内容) --> <form action="<%=request.getContextPath()%>/upload0" method="post" enctype="multipart/form-data"> File1: <input type="file" name="file1" /> <br /> 名称:<input type="text" name="desc" /><br /> <!-- File2: <input type="file" name="file2" /> <br />--> <input type="submit" /> </form> </body> </html>

UploadServlet0:

package cn.hncu.servlets; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.List; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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 org.apache.commons.io.FileUtils; public class UploadServlet0 extends HttpServlet { /* * 实现文件上传的基本套路 FileItemFactory f=new DiskFileItemFactory(1024*8,new * File("d:/a"));//缓存,用于存放临时文件 ServletFileUpload upload=new * ServletFileUpload(f); List<FileItem> list=upload.parseRequest(request); * for(FileItem f:list){ //FileItem: 普通表单组件、file组件中的文件名、file组件所上传的文件数据 * //分别处理每一个FileItem } */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 为了下面把接收到的文件数据保存到服务器硬盘,得获取服务器硬盘地址 request.setCharacterEncoding("utf-8"); String path = getServletContext().getRealPath("/uploads");// 绝对地址 DiskFileItemFactory f = new DiskFileItemFactory(1024 * 8, new File( "d:/a"));// 设置缓存大小和设置临时文件 ServletFileUpload upload = new ServletFileUpload(f);// 文件上传的解析器。如果不给实参f,则临时目录为默认的:Tomcat/temp下 upload.setFileSizeMax(1024 * 1024 * 5);// 设置每个文件最大5M // 解析 try { List<FileItem> list = upload.parseRequest(request); for (FileItem ff : list) { if (ff.isFormField()) {// 普通表单组件,本例为:参数desc // String desc = ff.getString();//以默认编码来获取 String desc = ff.getString("UTF-8");//POST2方式下,普通表单组件的编码要在获取参数的方法中指定参数 System.out.print(desc); } else {// input-file组件 String filename = ff.getName();// 接收文件名 System.out.println(filename); // 由于服务器上的本地资源文件名不能用中文,因此要把文件名进行转换(本例用uuid来代替) UUID uuid = UUID.randomUUID(); String uuid1 = uuid.toString().replaceAll("-", ""); String ext = filename.substring(filename.lastIndexOf(".")); String fn = uuid1 + ext; InputStream in = ff.getInputStream();// 接收文件内容 // 我们可以自己写底层IO代码来接收in中的数据 FileUtils.copyInputStreamToFile(in, new File(path + "/" + fn)); } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
转载请注明原文地址: https://www.6miu.com/read-40878.html

最新回复(0)