文件上传

2022-07-28

1.导入jar包

2.写好上传表单

表单必须要有 enctype属性 提交方式必须是post

在这里插入代码片
import com.jspsmart.upload.File;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;

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 javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.PageContext;
import java.io.IOException;

@WebServlet(value = "/update")
public class fileUP extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        // 创建对象
        SmartUpload su = new SmartUpload();
        //初始化
        PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, req, resp, null, false, 1024 * 5, true);
        su.initialize(pageContext);
        //设置编码方式
        su.setCharset("utf-8");
        //上传文件
        try {
            su.upload();
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }
        //得到文件
        File file = su.getFiles().getFile(0);
        //取得文件名
        String fieldName = file.getFieldName();
        //指定路径
        String url = "updatefile/" + fieldName;
        //保存文件
        try {
            file.saveAs(url,File.SAVEAS_VIRTUAL);
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }
        //是否保存成功
        req.setAttribute("filename",fieldName);
        //如何得到除了文件以外的数据
        String uname = su.getRequest().getParameter("uname");
        System.out.println("uname"+uname);
        //跳转页面
        req.getRequestDispatcher("/success.jsp").forward(req,resp);
    }
}

关于JspFactory.getDefaultFactory().getPageContext()中的属性内容:

属性 含义
servlet 请求的servlet
request serblet上挂起的当前请求
response serblet上挂起的当前响应
errorPageURL 请求JSP的错误页面的地址
needsSSession 是否需要session
buffer 缓冲区大小 单位为byte
autoflush 缓冲区应该在缓冲区自动刷新到输出流(true)还是抛出IOException(false)

其中 由于存了属性值 不能使用重定向

本文地址:https://blog.csdn.net/weixin_50688121/article/details/109632436

《文件上传.doc》

下载本文的Word格式文档,以方便收藏与打印。