HHHHHHHH

关于上传文件的一点总结

因为最近在做文件上传的功能,所以怕遗忘就稍微总结一下

1,上传文件最好使用commons-file-upload这个插件(貌似支持大文件上传)

2,关于多文件选择的问题

    默认情况下,是禁止多选文件的,即便是使用Ctrl和Shift也无法多选文件,

    这时我们只需要在file标签上添加multiple="multiple"即可,貌似这个属性是H5的属性,添加完后再选择文件时可以通过Ctrl或shift来多选文件

    <input type="file" name="files" multiple="multiple" id="uploadFile" />

3,关于在页面中使用了文件上传功能,造成无法使用Ajax的情况

    由于文件上传是以二进制流的形式进行传输的,而身为AJAX的关键对象之一的xmlhttp对象传输的却是xml格式的字符流,所以导致无法使用Ajax来异步提交文件    但是我们可以通过一些手段变相的实现Ajax的功能,我们可以通过iframe,将表单的提交目标设置为iframe,当我们提交表单时会先将图片等数据提交给iframe并在这个隐藏的iframe中向后台提交,

  这个时候会造成“页面无刷新”的假象!

    可能我们手动写的时候会比较麻烦,但是最简便的方式就是利用EasyUI中的form插件,我们只需要按照正常方式去书写表单,然后利用EasyUI来封装这个表格,然后设置相应的提交地址即可!

    但是EasyUI底层也是通过iframe的方式来“异步”提交文件的,但是这是在做项目时最简便的方式!

4,关于文件上传保存的地址问题

    一般我们可能会将上传的文件保存在项目目录的某一个文件夹下,但是这有一个非常大的隐患就是,当我们重新部署项目时,新的项目会将就的项目覆盖掉,也就是说当部署项目时,之前上传的文件就会被清空。

 一般我们或许项目的目录无非就是request.getSession().getServletContext().getRealPath("/")等其他方式,

  有的时候我们在main方法里面测试,得到的项目路径为D://Project/xxx

  但是等项目在tomcat等服务器上运行时,这个地址就莫名其妙的”变“成tomcat的地址了,这其实解释起来很简单,当我们利用main在运行时,这个时候只是运行项目实际的保存目录,当我们将项目部署在Tomcat等服务器上时

  我们通过地址访问的项目是运行部署在Tomcat上的项目,所以就会导致部署时项目的路径和main方法中的项目路径不一致的问题

    所以我们在部署新的项目时一定要做好备份操作,以免将之前的文件给覆盖掉,最简单的办法就是,将文件上传完成之后,通过Quartz等定时框架每隔多长时间就将文件复制到硬盘的其他目录中,这样就可以避免悲剧的发生!

5,关于不同平台上地址不通用的问题

    在windows上我们要访问某个文件夹的地址一般是D:\软件\Program\PPT(在windows上D:/软件/Program/PPT  也可以识别的)

  但是在Linux Unix系统中,地址是D:/软件/Program/PPT

 如果将D:\软件\Program\PPT这样的地址放到Linux上就无法识别了

  解决办法就是我们可以利用  File.separator 这个属性即可解决:

  "D"+File.separator+"Project"+File.separator+"xxx"

  系统会自动根据操作系统的不同来生成不同的斜杠,这样就可以避免,在windows上编写的路径到了Linux上无法识别了!

 

 

这些只是在日上生活中遇到的问题,和“解决办法”,只能止痛,若要根治,还得认真学习和研究!

如果上面所说的有不对的地方还希望大家能够严厉指出!

 

posted @ 2015-01-30 15:17  FranklinD  阅读(244)  评论(0编辑  收藏  举报