使用smartupload.jar进行文件的上传下载操作

我们在网上看见的很多图片资源和上传QQ头像是如何进行上传的呢,这里借助了smartupload的工具包,首先导入包,然后接下来前端页面会用到jsp所以要把jsp相关的工具包也导入。

上传操作:

 前端页面使用表单post请求服务器

  <form action="/onload" method="post" enctype="multipart/form-data">
    <input type="text" name="uname">
    选择文件<input type="file" name="file">
    <input type="submit" value="上传">
  </form>

现在来看看onload的代码

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建上传文件对象
        SmartUpload file = new SmartUpload();
      
        PageContext pageContext = JspFactory.getDefaultFactory().
getPageContext(this,req,resp,null,false,1024,true);
        //初始化上传操作
        file.initialize(pageContext);
        //设置编码
        file.setCharset("utf-8");
        //上传
        try {
            file.upload();
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }
        //获取文件信息
        File file1 = file.getFiles().getFile(0);
        String fileName = file1.getFileName();
        String contentType = file1.getContentType();
        System.out.println(contentType);
        //指定上传的路径
        String path = "/file/"+fileName;
        //保存位置
        try {
            //虚拟路径
            file1.saveAs(path,File.SAVEAS_VIRTUAL);
            req.setAttribute("filename",fileName);
            req.getRequestDispatcher("/success.jsp").forward(req,resp);
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }
        //获取文本信息
        String uname = file.getRequest().getParameter("uname");
        System.out.println(uname);
    }

 选中文件进行上传提交表单

转发后的页面

<body>
<img src="/file/${filename}">
<a href="/load?filename=${filename}">下载</a>
</body>

请求转发获得图片信息

注意转换了的request只能通过转换后的对象获取

这里发现设置虚拟路径并不会保存到本地,设置物理路径可以保存在本地文件夹,不清楚是什么原理可以在saveAs时选择保存的路径是虚拟还是物理或者自动选择

PS:这里发现图片保存在了war包

 下载的实现,页面加入一个a标签请求get到服务器

<body>
<img src="/file/${filename}">
<a href="/load?filename=${filename}">下载</a>
</body>

load的servlet

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String filename = req.getParameter("filename");
        String path = "/file/"+filename;
        //设置响应头信息和响应类型
        resp.setContentType("application/octet-stream");
        //头信息
        resp.setHeader("Content-Disposition","attachment;filename="+filename);
        req.getRequestDispatcher(path).forward(req,resp);
        //刷新缓存区
        resp.flushBuffer();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值