Web应用文件上传

写在前面
       在cbs项目中进行软件升级包的上传保存,使用到了文件上传,这里简单讲一讲文件上传的实现过程以及使用中的一些问题
       为了贴近实际使用,直接使用文件从页面上传到后台处理的步骤一步一步讲解。
页面
       页面上表单中的选项框file 是文件上传的起点,在表单中input 选项框,type=”file” ,能够打开文件浏览器,浏览本地机器上的文件
       < input type = "file" name= "packagefile">
       表单发起上传文件请求有一个地方需要注意,就是在form 的属性里面必须使用enctype =“multipart/form-data”, 为什么呢?原因在于,enctype 属性指定将数据回发到服务器时,浏览器使用的编码类型,enctype EncodeType 的简写。表单数据默认的编码为”application/x-www-form-urlencoded” ,就是说,在发送到服务器之前,所有的字符都会进行编码(空格转换为”+” 加号,特殊符号转换为ASCII HEX 值),窗体数据被编码为名称/ 值对,这是标准的编码格式,但是不能用于文件上传。enctype=”multipart/form-data” 是设置表单的MIME mutipurposeinternet mail extensions 多用途互联网邮件扩展类型,设定某种扩展名的文件用一种应用程序来打开的方式类型,具体参见http://baike.baidu.com/view/160611.htm?fr=aladdin )编码,是指能够上传文件。
   < form action="uploadaddVersion.action" method = "post" enctype="multipart/form-data">
后台
       struts2 很好的对文件上传进行了封装,在接收上传文件时,创建和页面name 属性对应名称的File 对象就能够接收到上传至服务器的文件,至于上传的文件名获取,这里需要注意的是,必须创建的File 对象名+FileName 拼接而成,否则,原上传文件名是获取不到的。
     /**Initial the file of upload */
     private   File packagefile;
    /** The name of the upload file */
  private String packagefileFileName ;
        接收到文件之后的操作就简单了,对文件进行保存,保存到指定位置,如果保存地址不正确,进行文件删除等等。参见下面的File类方法整理。
这里详细说一下对文件进行另存的两种常用方法
1.    使用流将文件写到指定目录或者地址
- 创建输入流,读取上传的文件
    InputStream is = new FileInputStream(upload);
- 创建保存文件以及输出流
    File toFile = new File(uploadPath, fileName);
    OutputStream os = new FileOutputStream(toFile);  
- 创建字节数据(定义每次读多少长度的内容)
    byte[] buffer = new byte[1024];
- 循环读取输入流中的文件并通过输出流写到保存文件中
     while ((length =is.read(buffer)) > 0) {     
                   os.write(buffer, 0,length);     
      }   
- 关闭流
      is.close();  
     os.close();
2.    使用FileUtils包对文件进行操作
FileUtils是对流操作的一次封装,封装之后对文件的操作更方便。常用功能包括复制文件,创建文件、删除文件等等,也可以对文件进行遍历,对文件获取字节数组,获取输入输出流等等,这里不就详细讲。
复制文件:
FileUtils. copyFile(packagefile, sourcefile);
copyFile(srcFile, destFile)
srcFile , 源文件
destFile,目标文件
    小细节:
    在保存文件的时候避免不了要先创建文件,文件创建的方法有 3 种:
    1.newFile(String filepath)
         2.new File(File parent,String child)
         3.new File(String parent, String child)
        第一种filepath在实际使用中, 文件路径如果知道当然不会出错,但是多数情况是知道上传地址,然后需要使用地址拼接上传文件名获取上传文件的绝对路径,在拼接过程中由于系统异同,不好处理使用"\"还是"/",故不推荐使用
        第二种和第三种类似,一种是使用父文件,一种是使用父文件路径,两种都可以直接获取,相对第一种会简洁许多。
       至此,对上传文件的操作已经完成。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值