美文网首页alreadyjs css htmlkankan(good)
使用smortupload上传和下载文件

使用smortupload上传和下载文件

作者: paterL | 来源:发表于2022-09-17 21:42 被阅读0次

    smortupload是一套上传组件包,可以轻松实现上传及下载功能,可以限制上传文件的类型,也可以轻易得到文件的后缀名。
    smortupload是以jar包的形式给出的,再使用的时候要放到web的lib目录下进行配置使用。由于要上传文件,则必须对表单进行封装,因为传递的不是普通的二进制文件。在from标签里要使用enctype="multipart/form-data"转成二进制的文件

    <form action="/newbook" method="post" id="register" name="upload" enctype="multipart/form-data">
    

    将表单提交到servlet后不能再时使用原先方法里面的请求和响应对象,要初始化smortupload组件里的请求和响应对象,首先创建smortupload对象

    //        创建smortupload对象
            SmartUpload su = new SmartUpload();
    
    //        初始化请求和响应对象
            su.initialize(this.getServletConfig(),req,resp);
    //       创建一个新的请求对象
            Request req1 = su.getRequest();
    

    通过smortupload组件中的upload上传

    //        上传过程
            try {
                su.upload();
            } catch (SmartUploadException e) {
                e.printStackTrace();
            }
    

    获取到上传的文件对象(注意这个对象所在的包)

    Files fs  = su.getFiles();
    //        获取第一个文件
            File f = fs.getFile(0);
    //        获取文件名称
            String fname = f.getFileName();
    

    把上传的文件保存到指定的位置,这里的路径推荐是使用相对路径

            try {
                su.save("D:/Java/BookShop/web/img/bookpicture");
            } catch (SmartUploadException e) {
                e.printStackTrace();
            }
    

    使用上面新创建的请求对象获取到表单里面的参数

    String bookname = req1.getParameter("bookname");
    

    注意这里拿到的是一个二进制的数据,所以我们在存入数据库之前要进行转码,使用utf-8的编码格式

    String bookname1 = new String(bookname.getBytes(),"utf-8");
    

    然后连接数据库就可以了。
    文件的下载

    // 获取需要下载的文件名
            String filename = req.getParameter("filename");
            // 得到文件地址
            String url = "/uploadfile/"+filename;
            // 将响应的内容设置为通用的二进制流
            resp.setContentType("application/octet-stream");
            // attachment 告诉浏览器以附件的方式下载文件(弹出下载框)
            filename = URLEncoder.encode(filename,"utf-8");
            resp.addHeader("Content-Disposition","attachment;filename="+filename);
    
            // 发送
            req.getRequestDispatcher(url).forward(req,resp);
    
            // 清空缓存区:将服务端缓存区的文件内容,立即传送给客户端
            resp.flushBuffer();
    

    到此smortupload的上传和下载结束。

    相关文章

      网友评论

        本文标题:使用smortupload上传和下载文件

        本文链接:https://www.haomeiwen.com/subject/lmpeortx.html