搭建一个文件服务器的方式有很多,本文介绍笔者曾经用过的两种:

  • 使用nginx
  • 使用java服务,通过controller提供

一、使用nginx搭建

在nginx.conf中直接配置server即可,示例代码如下:

user felice felice;
worker_processes auto;
master_process on;
pid log/nginx.pid; error_log log/error.log warn;
error_log log/info.log info; events {
worker_connections ;
} http {
server_tokens off; client_header_buffer_size 8k;
client_max_body_size 130m;
proxy_buffer_size 64k;
proxy_buffers 64k; log_format access '$remote_addr $host $remote_user [$time_local] $status $request_length $body_bytes_sent $request_time 0 0 0 - "-" "$request" "$http_referer" "$http_user_agent" $http_cookie $bytes_sent';
access_log log/access.log access; keepalive_requests ;
keepalive_timeout ; server {
listen ;
server_name localhost;
charset utf-; location / {
default_type 'application/octet-stream';
add_header Content-disposition "attachment";
root /User/sonofelice/mm;
}
} }

启动nginx之后,通过请求下面的url就可以下载/User/sonofelice/mm目录下的文件了:

http://127.0.0.1:8123/fileName

在host:port/后面直接跟对应目录下的文件名称即可。

如果强制浏览器下载文件,而不是进行json解析后直接显示内容,需要设置header选项

add_header Content-disposition "attachment";

注意,在nginx.conf中需要设置用户以及用户组,否则可能对本地目录没有操作权限,可以通过ls -ld命令查看当前用户以及用户组:

我的有用户名为baidu,用户组为staff

二、使用java服务

使用java的controller提供文件下载也非常简单,可以用下面的几行代码搞定:

@RestController
@RequestMapping("/")
@Slf4j
public class FileDownloadController { @RequestMapping(method = RequestMethod.GET, value = "/{fileName}")
public void downloadFile(@PathVariable String fileName, HttpServletResponse response) {
Path file = Paths.get(fileName);
if (Files.exists(file)) {
response.setContentType("application/zip");
try {
response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
Files.copy(file, response.getOutputStream());
} catch (IOException e) {
log.error("File download error:", e);
}
}
}
}

在启动java服务之后,也可以通过第一节中的方式请求url进行文件的下载。

只传入文件名即可。当然,上面的contentType设置的是zip,如果不确定文件的格式,可以使用

application/octet-stream

HTTP Content-type常用对照表参考: http://tool.oschina.net/commons

使用nginx搭建文件下载服务器的更多相关文章

  1. Nginx 搭建图片服务器

    Nginx 搭建图片服务器 本章内容通过Nginx 和 FTP 搭建图片服务器.在学习本章内容前,请确保您的Linux 系统已经安装了Nginx和Vsftpd. Nginx 安装:http://www ...

  2. Varnish,Nginx搭建缓存服务器

    Varnish,Nginx搭建缓存服务器 一. varnish 1.安装pcre库,兼容正则表达式 # tar -zxvf pcre-8.10.tar.gz # cd pcre-8.10 # ./co ...

  3. Nginx搭建图片服务器

    Nginx搭建图片服务器 标签(空格分隔): linux,nginx Nginx常用命令 ./nginx 启动 ./nginx -s reload 重载配置文件 ./nginx -s stop|sta ...

  4. windows环境下基于nginx搭建rtmp服务器

    基于nginx搭建rtmp服务器需要引入rtmp模块,引入之后需重新编译nginx linux环境几个命令行就能实现编译,笔者未尝试,网上有很多教程. windows环境还需要安装一系列的编译环境,例 ...

  5. nginx 搭建图片服务器(windows 下,linux 下原理应该一样)

    作者的心声:很多知道的.用过的东西,不写下来,下次还要百度查询,浪费时间和精力,故本次写下学习笔记,方便下次查阅. 题外话:如有读者通过我这篇博客解决了工作上的难题,可以给个评论,让我一起分享你的喜悦 ...

  6. Nginx,Nginx 搭建图片服务器

    Nginx Nginx 概述 反向代理 工作流程 优点 1:保护了真实的web服务器,保证了web服务器的资源安全 2:节约了有限的IP地址资源 3:减少WEB服务器压力,提高响应速度 4:其他优点 ...

  7. 轻松使用Nginx搭建web服务器

    如果读者以前做过web开发的话,就应该知道如何去搭建一个web服务器来跑你的web站点,在windows下你可能会选择去用IIS,十分的快捷,在linux下,你可能首先会想到apache,“一哥”( ...

  8. ubuntu下使用nginx搭建流媒体服务器,实现视频点播

    首先我们看如何实现视频点播,视频点播支持flv文件及H264编码视频,ACC编码音频的mp4文件: 第一步,创建单独的目录(因为软件较多,容易混乱),下载需要的软件: 我们需要下载nginx,pcre ...

  9. Windows环境下用jwplayer+Nginx搭建视频点播服务器

    flv视频可以采用两种方式发布: 一.普通的HTTP下载方式 二.基于Flash Media Server或Red5服务器的rtmp/rtmpt流媒体方式. 多数知名视频网站都采用的是前一种方式. 两 ...

随机推荐

  1. Linux动态库开发

    http://blog.csdn.net/qq_33850438/article/details/52014399 ### 导出符号------------------------------ 默认所 ...

  2. ad7888 linux driver

    /* ADCCONVERT.c : Generate ADC signals from SPI ports, as the A/D control signals. Author:  Aaron Fu ...

  3. awk 计算数据的和和平均值

    awk 计算数据的和和平均值 2014年12月02日 21:11:12 HaveFunInLinux 阅读数:14487更多 个人分类: 小技巧   本文译至:http://d.hatena.ne.j ...

  4. go hmac使用

    https://github.com/danharper/hmac-examples 94 func generateSign(data, key []byte) string { 95 mac := ...

  5. PCB封装技术

    TQFP(thin quad flat package,即薄塑封四角扁平封装)薄四方扁平封装低成本,低高度引线框封装方案. MLF(MicroLeadFrame),MLF接近于芯片级封装(Chip S ...

  6. 构造 - Codeforces Round #319 (Div. 1)C. Points on Plane

    Points on Plane Problem's Link Mean: 在二维坐标中给定n个点,求一条哈密顿通路. analyse: 一开始忽略了“无需保证路径最短”这个条件,一直在套最短哈密顿通路 ...

  7. ThinkPHP项目笔记之控制器常用语法

    如,有数据表:tmp,以下以此为例. $a = M('Tmp'); $a -> select(); $a -> where(condition)->select(); $a -> ...

  8. MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)

    类型别名(typeAliases):     作用:通过一个简单的别名来表示一个冗长的类型,这样可以降低复杂度.    类型别名标签typeAliases中可以包含多个typeAlias,如下 < ...

  9. JavaScript 事件循环 — event loop

    引言 相信所有学过 JavaScript 都知道它是一门单线程的语言,这也就意味着 JS 无法进行多线程编程,但是 JS 当中却有着无处不在的异步概念 .在初期许多人会把异步理解成类似多线程的编程模式 ...

  10. 安装wampserver时提示丢失MSVCR110.dll

    安装Wampserver 2后启动的时候提示系统错误:MSVCR110.dll丢失. 在wampserver官网上有例如以下提示: 于是卸载原来的WAMPSERVER 2 ,在http://www.m ...