必威体育Betway必威体育官网
当前位置:首页 > IT技术

用SmartUpload实现文件上传,下载,删除

时间:2019-08-21 03:45:33来源:IT技术作者:seo实验室小编阅读:90次「手机版」
 

smartupload

1、什么是上传和下载?

数据上传是指客户端向服务器上传数据,客户端向服务器发送的所有请求都属于数据上传。文件上传是数据上传的一种特例,指的是客户端向服务器上传文件。即将保存在客户端的文件上传至服务器中的一个副本,保存到服务器中。

- 数据下载是指客户端从服务器上获取数据的过程。文件下载是数据下载的一种特例,指的是客户端从服务器下载文件,即将原来保存在服务器中的文件下载到客户端中一个副本保存。通常我们对服务器所发出的请求,大多数是文件下载请求,从服务器中下载文本、图片、声音、视频等文件,然后由客户端浏览器对这些文件进行解析后,才可能看到这些多媒体信息。

- 但是我们这里所说的文件下载,指的是文件从服务器下载到浏览器后,浏览器并不直接解析,而是以附件的形式保存到客户端中。

- 上传与下载的文件可以是文本文件、图片、声音、视频等各种类型。

b8f92803d83bf1eeb80b10fbce113a91.png

2、文件上传的实现:

a、上传时对表单的要求:

- 文件上传要求客户端表单提交特殊的请求–multipart请求,即包含多部分数据的请求。所以文件上传表单对于表单数据的编码类型要求,必须为multipart/form-data。即要为标签指定enctype属性值为“multipart/form-data”。(enctype,即encodingtype,编码类型。)

- 由于客户端上传文件的大小是不确定的,所以HTTP协议规定,文件上传的数据要存放于请求正文中,而不能够出现在url的地址栏中,因为地址栏中可以存放的数据量太小。也就是说,文件上传的表单,必须提交POST请求,而不能够提交GET请求。

这里介绍的是用jsp+servlet实现的;

jsp表单代码就不贴了,注意2点就行:

1、表单提交必须用post方式 (method=“post”)

2、设置表单enctype属性为”multipart/form-data”

上传

      //指定文件存放位置
      String filePath = "/images";//这里的斜杠表示项目根目录
      //创建文件夹对象(未真正创建文件夹)
      File file = new File(filePath);
      //如果指定路径文件夹不存在就创建一个文件夹
      if(!file.exists()) {
          file.mkdirs();
          /*file.createnewfile();//这里的文件对象创建时参数要加上file名*/     
      }
      //创建SmartUpload对象
      SmartUpload su = new SmartUpload();
      //初始化SmartUpload对象
      su.initialize(getServletConfig(),request,response);
      //设置上传文件的最大值
      su.setMaxFileSize(1024*1024*10);
      //设置上传文件的总最大值
      su.setTotalMaxFileSize(1024*1024*100);
      //设置允许上传文件类型
      su.setAllowedFilesList("jpg,gif,jpeg,png");
      try {
        //设置不允许上传的文件类型
        //su.setdeniedFilesList("rar,txt,mp4,mp3,zip");
        //上传
        su.upload();
        Files files = su.getFiles();
        com.jspsmart.upload.File file1;
        for(int i=0;i<files.getCount();i++ ) {
            file1 = files.getFile(i);

    //遍历上传的所有文件,设置文件名,这里用了自己写的一个工具uniqueId生成唯一id作为图片的id文件名
         file1.saveAs(filePath+"/"+UniqueId.getId()+Math.random()+"."+file1.getFileExt());
        //保存文件到指定路径,返回上传了多少个文件
        //int n = su.save(filePath);
        //System.out.println("上传了"+n+"个文件");
        System.out.println(file1.getfieldName());//表单的name值
        System.out.println(file1.getFileName());//文件名
        System.out.println(file1.getSize());//文件大小
        System.out.println(file1.getFilePathName());//文件原始路径加文件名
        System.out.println(file1.getFileExt());//文件类型
        System.out.println("___________________________________");
        System.out.println("___________________________________");
        }
      } catch (Exception e) {
            e.printstacktrace();
            System.out.println("上传失败!");
            System.out.println(e.getmessage());
        }

(在Eclipse中,默认会把Web项目放到Eclipse的工作空间下的.metadata.plugins\org.eclipse.wst.server.core\tmp0(或者是tmp1)\wtpwebAPPs\下)

在这里可以找到你上传成功的文件

下载

//超级简单
String fileName = request.getparameter("fileName");
        SmartUpload su = new SmartUpload();//创建对象
        su.initialize(getServletConfig(), request, response);//初始化
        try {
            su.downloadFile("/images/"+fileName);//路径加文件名
            //su.setcontentDisposition();
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }

删除

        String filePath = "/images/115049-106.jpg" ;//所在的项目路径
        filePath = getServletcontext().getrealpath(filePath);//获取真正路径
        System.out.println(filePath);
        // 在指定路径下创建指定名称的文件
        File file = new File(filePath);//获取文件
        file.delete();//删除

注意:

1,在上传的时候提交表单的时候如果input项有非file类型的,在servlet使用request的时候不能直接使用,而是要用su.getRequest()代替,su是SmartUpload对象,而且要在su初始化和调用upload()方法之后再使用。

2,在输入路径的时候,应用SmartUpload上传保存文件的时候可以用相对于项目的路径,如“/”+上传文件夹,而在创建文件夹要用硬盘真实路径,可以用getServletContext().getRealPath(filePath)获得,filePath指上面的相对于项目的路径。

3,不知道为什么用ajax无法和SmartUpload兼容,能访问servlet执行post方法但是执行SmartUpload的代码时有问题,可能是我自己的问题

开头部分参考资料:http://blog.51cto.com/12402717/1977293

相关阅读

Axure教程:进度条的实现

Axure的进度条应该如何实现呢?本文对每一个步骤进行了讲解。1.需要注意的地方(1)进度条如何实现?(2)进度百分比如何实现?2.元件准备从元

免费听歌下载歌曲的几个网站

1.歌曲大全-音乐聚合搜索引擎,免费在线试听及 [img=334,181][/img]在线下载所有主流音乐平台的付费歌曲,需要什么歌曲直接。http://

【整站下载器】小飞兔整站下载V3.0

小飞兔整站下载是一款可以下载整个网站内容的软件,你只要输入一个网址,软件能自动分析网站链接、图片、样式、文件等资源,并能将整个

Proxifier实现指定进程代理IP 雷电模拟器为例

Proxifier 3.31 汉化注册版Proxifier 3.31 汉化注册版 本地下载:HA-Proxifier331-LDRProxifier 是一款功能非常强大的socks5客户端

WatchOS 实现iPhone与Apple Watch通信(数据传输)

前言(没有Demo)hihi,勇敢的小伙伴儿们大家好,最近身体不适···就不多说废话了,今天带大家了解的是AppleWatch和iPhone之间通信的两种

分享到:

栏目导航

推荐阅读

热门阅读