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