enctype属性值为“multipart/form-data”的时候用SmartUpload上传下载

SmartUpload的上传和下载

文件上传的实现

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指上面的相对于项目的路径。
————————————————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值