文件上传下载是web项目常见的功能,最近有个项目要求把文件保存到项目路径外,正好总结一下
一、文件上传
1.文件保存在项目路径下
1.1 WEB-INF目录不允许通过Url直接访问,因此一般存放比较重要的文件,需要登录后通过服务器程序去访问,可以做一些权限控制;
1.2 而允许任何人访问的文件(如淘宝商品的图片),所以这类文件可以放在WEB-INF目录外,可以通过url直接访问。
2.文件保存在项目路径外
如果文件保存在项目路径下,每次发布war包会覆盖项目路径容易丢失文件,因此上传的文件一般保存在项目路径外。但是这种情况,用户不能直接访问服务器外面的静态资源,解决方法一般有三种
2.1 配置tomcat虚拟主机,相当于将文件保存路径映射为一个web工程,可以通过url直接访问
2.2 使用nginx反向代理,配置文件服务器,方法与第一种类似,也可以通过url直接访问
2.3 编写服务端action处理用户的访问请求,通过数据流来读取文件
3.文件上传成功后,将文件存储的路径保存到数据库中,用于文件下载
二、文件下载
1.url直接指向下载资源
这时使用 DefaultServlet ,将资源返回。第一部分1.1、2.1和2.2都属于这种情况
2.编写服务端action,通过数据流下载,这里要使用文件的MIME协议,这里就不展开了
第一部分1.2、2.3属于则属于这种情况
3.文件下载安全
文件名通过随机码命名,将路径和文件名保存在数据库中,一般很难猜到;另外如果时采用服务端action的方式,可以在action中做一些权限控制