Servlet上传文件

1、创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录

2、使用DiskFileItemFactory 对象创建ServletFileUpload对象,并设置上传文件的大小限制。

3、调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。

4、对list进行foreach

• 为普通表单字段,则调用getFieldName、getString方法得到字段名和字段值

• 为上传文件,则调用getInputStream方法得到数据输入流,从而读取上传数据。

代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class uploadPhotoServlet extends HttpServlet{
//查看源码,request和response顺序不能换
public void doPost(HttpServletRequest request, HttpServletResponse response) {
String name = null;
try {//DiskFileItemFactory --> ServletFileUpload --> FileItem
DiskFileItemFactory factory = new DiskFileItemFactory(); //创建FileItem 对象的工厂
factory.setSizeThreshold(1024*1024);//设置容量最大1MB
ServletFileUpload fileup = new ServletFileUpload(factory); //处理上传的文件数据,并将表单中每个输入项封装成一个FileItem 对象中

        List<FileItem> items = fileup.parseRequest(request);//parseRequest解析所有request数据,每个数据都返回一个FileItem
         
        for(FileItem item:items) {
            //判断 每个读取到的fileitem数据是文件还是普通文本
            if(item.isFormField()) {
                //普通文本,就在tomcat中打印数据,也就是name="heroname"的值
                System.out.println(item.getFieldName());//返回name-->"heroname"
                String name1 = item.getString();//返回item中保存的数据流
                System.out.println(name1);
                        }
            //是文件
            else {
                name = System.currentTimeMillis()+".jpg";
                String filepath = request.getServletContext().getRealPath("/");//获取当前项目的路径,“/”就是默认路径web
                 
                File f = new File(filepath, name);
                f.getParentFile().mkdirs();//创建file对象时,都要判断父目录的存在
                 
                InputStream is=item.getInputStream();//创建流读取item中的数据
                FileOutputStream fos = new FileOutputStream(f);//创建流输出
                 
                byte b[] = new byte[1024*1024];
                int length=0;
                while((length = is.read(b))!=-1) { //所有字节复制进新文件
                    fos.write(b, 0, length);
                }
                fos.close();
                is.close();
            }
        }
        String html = <img width='200' height='150' src='/%s'/>";//创建img
        response.setContentType("text/html");
        PrintWriter pw = response.getWriter();
        pw.format(html, name);  
    }catch(Exception e) {e.printStackTrace();}
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JSP中使用Servlet来处理文件上传是一种常见的做法。以下是一个简单的示例代码: 1. 创建一个JSP页面(upload.jsp),用于显示文件上传表单: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <h2>文件上传</h2> <form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" id="file"> <input type="submit" value="上传"> </form> </body> </html> ``` 2. 创建一个Servlet(UploadServlet),用于处理文件上传请求: ```java import java.io.File; import java.io.IOException; 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; @WebServlet("/upload") @MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB maxFileSize = 1024 * 1024 * 10, // 10MB maxRequestSize = 1024 * 1024 * 50) // 50MB public class UploadServlet extends HttpServlet { private static final String UPLOAD_DIR = "uploads"; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String applicationPath = request.getServletContext().getRealPath(""); String uploadPath = applicationPath + File.separator + UPLOAD_DIR; File uploadDir = new File(uploadPath); if (!uploadDir.exists()) { uploadDir.mkdir(); } Part filePart = request.getPart("file"); String fileName = getFileName(filePart); String filePath = uploadPath + File.separator + fileName; filePart.write(filePath); response.getWriter().println("文件上传成功"); } private String getFileName(Part part) { String contentDisposition = part.getHeader("content-disposition"); String[] elements = contentDisposition.split(";"); for (String element : elements) { if (element.trim().startsWith("filename")) { return element.substring(element.indexOf('=') + 1).trim().replace("\"", ""); } } return null; } } ``` 在上述代码中,使用了`@MultipartConfig`注解来指定文件上传相关的配置,包括文件大小阈值、最大文件大小和最大请求大小。在`doPost`方法中,通过`request.getPart("file")`获取文件的`Part`对象,然后使用`write`方法将文件保存到指定的路径。 3. 部署应用程序到支持Servlet的容器中(如Tomcat),然后访问upload.jsp页面即可看到文件上传表单。 这是一个简单的文件上传示例,你可以根据实际需求进行修改和扩展。同时,请确保在实际开发中处理上传文件时要进行适当的安全验证和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值