JavaWeb项目文件上传下载

文件上传下载是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中作一些权限控制