SmartUpload

SmartUpload🤤

首先来介绍一下什么是smartUpload吧!

smartUpload是由WWW.jspsmart.com网站开发的一套上传组件包,可以轻松的实现上传文件的上传及下载功能,可以轻松的设置上传文件的类型,上传文件的大小,上传文件的名称,也可以进行多文件上传,论其功能的简洁性而言真实我们实现文件上传功能的好帮手!总之一句话:
“真香”🤤


好!那么我们一下分别按照几个部分来讲解

  • #实现文件上传对前端页面的小要求🚗
  • #实现文件上传后端接口的几个常用的方法及其介绍🚓
  • #实现文件上传后端的项目实战演示🚕
  • #实现文件上传踩过的坑🕳

🙆‍♂️实现文件上传前端页面小要求

我们都学过html标签的基本的一些知识(偷偷告诉你,我前面写了一节关于html标签的博客哟,提前知道一些html标签在前后端对接过程中也是有好处的哟!html标签小小白—>小白
那么一定知道数据由前端提交给后端一般是用表单来实现的,那么我们也知道你想提交什么数据就需要在input标签中选择什么样的属性,当我们实现文件上传的过程也不例外,这里需要把type属性的属性值设置为file,要注意了,老规矩这里一定要设置好name属性!
如图:
图片.png
前面在介绍smartUpload的时候,我们说了,smartUpload是可以实现多文件的上传的,在这里根据你的需求可以设置多个input标签(想设置几个就几个)

🙆‍♂️实现文件上传后端接口的几个常用的方法及其介绍

1)samrtUpload.initialize(getServletConfig(),request,response)
这个方法是用来初始化smartUpload对象的,这个传入的参数有(servlet的配置信息,request,response
2)smartUpload.setMaxFileSize(1024102410)
这个方法是用来设置上传文件的最大大小,单位是字节,例如这里1024102410就代表了单个文件最大是10M
smartUpload.setTotalMaxFileSize(10241024100)
这个方法是用来设置上传多个文件时,所有文件最大能上传多大,同样的它的单位也是Byte,这里10241024100就代表了所有一次性上传的文件最大为100M
3)smartUpload.setAllowedFilesList(“txt,jpg,gif”)
这个方法是用来设置能上传文件的类型,参数是字符串的形式,文件的类型与类型之间用,隔开即可
smartUpload.setDeniedFilesList(“rar,jsp,js”);
这个方法是用来设置上传文件不允许的文件类型,参数也是字符串的形式哟!
4)smartUpload.upload()
当程序运行到这个方法的时候,就会进行文件的上传
基本的方法就这些下面我们开始项目实战

🙆‍♂️实现文件上传后端的项目实战演示

        response.setContentType("text/html;charset=UTF-8");
        //设置上传文件保存的路径,比如我这里是在根目录下,webRoot的images文件夹中
        String filePath1 = request.getSession().getServletContext().getRealPath("/")+"WEB-INF\\images1";
        String filePath2 = request.getSession().getServletContext().getRealPath("/")+"WEB-INF\\images2";
        //判断文件夹是否存在
        File file1 = new File(filePath1);
        File file2 = new File(filePath2);
        //如果存在的话就继续,如果不存在就创建一个文件夹
        if(!file1.exists()){
            file1.mkdir();
        }
        if (!file2.exists()){
            file2.mkdir();
        }
        /*
        使用samrtUpload组件实现文件的上传
         */
        //创建一个smartUpload对象
        SmartUpload su = new SmartUpload();
        //初始化smartUpload
        su.initialize(getServletConfig(),request,response);
        //设置上传文件的大小 这里设置成10M
        su.setMaxFileSize(1024*1024*10);
        //设置上传所有文件的大小 这里设置成为100M
        su.setTotalMaxFileSize(1024*1024*100);
        //设置上传文件的类型
       su.setAllowedFilesList("txt,jpg,gif");

        try {
            //设置不允许上传文件的类型
            su.setDeniedFilesList("rar,jsp,js");
            //上传文件
            su.upload();
            //这个方法用来获取第几个上传的文件,当然它是从0开始排号的
            com.jspsmart.upload.File file00 = su.getFiles().getFile(0);
            com.jspsmart.upload.File file11 = su.getFiles().getFile(1);
            com.jspsmart.upload.File file22= su.getFiles().getFile(0);
            //把这个文件保存在对应的位置
            file00.saveAs("/WEB-INF/images2/"+"001.jpg");
            file11.saveAs("/WEB-INF/images2/"+"002.jpg");
            file22.saveAs("/WEB-INF/images2/"+"003.jpg");
            //把文件保存到指定的目录下面
            //save方法的返回参数是int类型也就是返回保存了多少个文件
            int count=su.save(filePath1);
            System.out.println("已上传成功"+count+"个文件");

        } catch (SQLException | SmartUploadException e) {
            e.printStackTrace();
        }
       

🙆‍♂️实现文件上传踩过的坑

说了这么多其实无论是代码还是方法的介绍在网上的一些博客里面都是可以拿到的,我这里分享一些他们博客里拿不到的一些东西。

一、🤞
String filePath1 = request.getSession().getServletContext().getRealPath("/")+"WEB-INF\\images1";

这个这里我注释写的很简单,设置上传文件的保存路径,但是你细细品一下,开玩笑我怎么能知道服务器上的路径是什么?对吧,在你书写路径的时候,最最最不能写的就是绝对路径,那么就要写相对路径咯,那么你再品,要写相对路径这里的相对路径怎么才能相对到你想要的地址,(其实这里是个大坑!我无数次在写路径的时候翻车,如果有大牛看到这里真的希望有人能出一个关于路径的博客,这个真的很懵!🙇‍♂️)
那么这里我采取的方法是放到项目的根目录下,那么这个根目录在哪?
打开tomcat的webapps目录。然后打开你的项目,会看到类似的下面这个
图片.png
打开moudle也就是这里的upload,会出现
图片.png
继续打开
图片.png
看到这个没,是不是很眼熟,这个是不是在设置虚拟路径的时候的名字,或者你的8080后面跟的那一串,没错这个就是根目录
也就是request.getSession().getServletContext().getRealPath("/")所返回的地址,是不是恍然大悟的感觉!!!!我也是!然后就可以在这里创建文件夹,上传文件等等就很畅快了。
找对路径是王道!

二、🤞
    file00.saveAs("/WEB-INF/images2/"+"001.jpg");
            file11.saveAs("/WEB-INF/images2/"+"002.jpg");
            file22.saveAs("/WEB-INF/images2/"+"003.jpg");

这一串代码看着不奇怪吗?细心的小朋友会发现在这里我是images2,和00x.jsp,明明我以及upload的过了为什么这里还要saveAs(保存)????😫
如果直接上传upload,在文件夹中就会
图片.png
对最让人头疼的一点中文乱码,我查资料之后,想一劳永逸的改掉文件名的乱码是需要更改smartUpload的内部代码,但是它是上锁的,是不允许别人改编程者的代码的,这就让我一度很绝望,所以这里创建一个新的文件夹,另存在新的文件夹中,就能达到改名并且避免中文乱码的效果。
这个惨绝人寰的故事告诉我们,很多的jar都是歪果人写的,当我们命名自己的文件的时候一定一定要注意命名规范,一定一定!)

三、🤞

第三点没有在上面的代码中写明,这里要说的是,在一次请求中是不能同时传输文件和parameter的(目前为止经过实战和查一些博客我是得到了这样的信息,但是没有查到明确的定义,一些前辈给的建议也是文件和paramter一般是用两个表单来提交的)
那么这个映射出来一个问题,如果我上传了这个图片,还想把图片的存储地址存放在数据库中,这两个功能是不能同时实现的。
那么也就是说需要servlet和servlet之间传递数据,且在执行完一个servlet之后需要跳转到另一个servlet
这里就需要

this.getServletContext().setAttribute(键值对);
response.sendRedirect("另一个Servlet");
好今天的内容就说到这,上面的内容的感慨包含着最近的做项目的慨叹,本来文件上传和下载这我是通过基本的流来写的,但是一个是我自己并没有流这一块的知识,另一个盲目的看网络上的博客,没有理解功能的真谛,结果两天前测试的时候就突然爆了特别大的看都看不懂的bug,怎么也解决不了,没办法只能重新学新的方法,也就是smartUpload,使用的时候感觉真香,但也不由得感叹前人的伟大!

所以在这里也是反思自己,总结自己,博客只适用于解决一些简单的特定的问题,如果真的想充分理解,还是要找书、视频、文档成体系的学习,另一个没彻底懂得东西,用了真的迟早要爆bug
最后还是雍正大帝镇楼,祝大家项目无bug
图片.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值