欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

0_SmartUpload 文件上传

程序员文章站 2022-03-04 22:58:52
...

????需求:在前端页面上传文件到服务器


1. 将jar包添加到项目中:

百度网盘链接:https://pan.baidu.com/s/1erl-9BmC7kQHtRHeHEnFkw 提取码:6nbj

2. 前端页面准备上传的页面

<!--form表单中添加enctype属性: 以字节方式上传-->
<!--提交方式: post 不限制文件大小-->

<form action="/upload" method="post" enctype="multipart/form-data">
    名称:<input type="text" name="fileName"/><br>
    文件:<input type="file" name="myFile"/><br>
         <input type="submit" value="上传"/>
</form>

3.服务器端进行处理

@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.对象创建:
        SmartUpload smartUpload = new SmartUpload();
        //2.初始化
        //通过工具类获取工厂对象
        JspFactory factory = JspFactory.getDefaultFactory();
        //通过工厂对象获取pageContent内置对象:传入7个参数(请求的Servlet,当前请求,当前响应,错误页面的url,session会话,缓冲区大小,是否自动刷新)
        PageContext pageContext = factory.getPageContext(this,req,resp,null,false,1024*5,true);
        smartUpload.initialize(pageContext);

        //3.设置编码方式
        smartUpload.setCharset("utf-8");
        //4.上传(此时在服务器)
        try {
            smartUpload.upload();
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }
        //5.保存文件
        //获取单个文件
        File file = smartUpload.getFiles().getFile(0);
        //6.得到文件的基本信息
        String fileName = file.getFileName();
        String type = file.getContentType();
        System.out.println("type="+type);
        //7.指定服务器保存文件的路径
        String url = "uploadFile/"+fileName;
        //8.保存文件
            //保存路径+方式
        try {
            file.saveAs(url,SmartUpload.SAVE_VIRTUAL);
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }

        //9.是否保存成功-->如果上传成功,则页面显示该文件
        req.setAttribute("fileName",fileName);

        //10.测试:除文件以外的内容如何获取(名称等)
        String name = smartUpload.getRequest().getParameter("fileName");
        System.out.println("fileName1=" + name);
        //11.跳转页面
        req.getRequestDispatcher("/success.jsp").forward(req,resp);

    }
}

注:

(1)此时如果表单中有其他数据时,不能通过request直接获取,需要通过SmartUpload对象获取

String name=su.getRequest().getParameter("bookName"); 

并且该代码要在SmartUpload操作完成后添加 。

(2)解决乱码:

new String(name.getBytes("GBK"),"utf-8")

注:斜杠方向:/

/1. 获取内置对象时传入的7个参数的含义
public abstract PageContext getPageContext(Servlet var1, 
                                           ServletRequest var2, 
                                           ServletResponse var3, 
                                           String var4, 
                                           boolean var5,
                                           int var6,
                                           boolean var7);

0_SmartUpload 文件上传

/2. smartupload常用方法
1)执行上传和下载的初始化工作:initialize
2)设置编码方式: setCharset
3)文件数据的上传: upload 初始化之后执行
4)得到文件数组:getFiles
得到单个文件: smartUpload.getFiles().getFile(0)

​ 保存文件方法: file.saveAs(url,SmartUpload.SAVE_VIRTUAL);

5)将全部上传文件保存到指定目录,返回文件个数:sava
6)每个文件允许上传的最大长度: setmaxFileSize
7)允许上传文件的总长度: setTotalMaxFileSize(long filesize)

0_SmartUpload 文件上传