0_SmartUpload 文件上传

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


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);

在这里插入图片描述

/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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值