几种图片服务器的对比
1、直接使用ftp服务器,访问图片路径为 ftp://账户:密码@192.168.0.106/31275-105.jpg
不采用这种方式,不安全容易暴露ftp账户信息
2、直接使用IIS或Tomcat等服务器在项目中访问,图片少的情况可以考虑。商城网站则不行,图片访问处理需搭建图片服务器
3、ftp+nginx服务器,ftp负责上传图片,nginx负责图片的访问
 
一、需要的组件
1、ftp服务器(图片上传,本文选用IIS为容器)
ps Linux操作系统  可安装vsftpd作为服务器
2、nginx服务器
a、http服务:可以使用nginx做静态资源服务器。也可以使用apache。推荐使用nginx,效率更高。
b、反向代理 实现 负载均衡
 
二、nginx服务器的部署

 解压安装包,免安装运行
 
nginx cmd命令
start nginx //启动nginx
nginx -s stop // 停止nginx
nginx -s reload // 重新加载配置文件
nginx -s quit // 退出nginx
nginx -t //检查配置文件是否正确
         nginx -v //查看nginx版本号
 
1、配置端口号和访问路径
conf目录下的  nginx.conf 配置文件

 
修改端口号 为9090 
启动nginx   回到nginx文件夹根目录,按住shift键点击鼠标右键,选择右键菜单中的在此处打开命令窗口,输入start nginx 命令

 成功访问
 
 
2、添加图片服务访问配置
location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {
#默认的图片路径,也是ftp上传文件存放的路径,只要后缀是以上的都会到这个路径下搜索
root C:/imgextra;
}

  1. location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {
  2. #默认的图片路径,也是ftp上传文件存放的路径,只要后缀是以上的都会到这个路径下搜索
  3. root C:/imgextra;
  4. }

  

 

 
添加完成以后在cmd中执行  nginx -s reload 重新加载配置使其生效
图片文件所在路径 

 访问成功
 
3、图片存放路径分析
先来看看大型商城的图片路径
天猫图片存储
https://gdp.alicdn.com/imgextra/i2/1856815898/TB2QxuMuHBnpuFjSZFGXXX51pXa_!!1856815898.jpg
京东图片存储
https://img30.360buyimg.com/sku/jfs/t4816/236/2599170601/86961/b24bbc4/5902ff58Nc4ceea7c.jpg
当当图片存储
http://img3x5.ddimg.cn/19/20/1206933175-1_x_6.jpg
 
分析发现几乎都采用CDN和单独的域名来作为独立的图片服务器,目的是为了减少业务服务器的并发访问量。
关于图片服务器架构介绍戳这里  
http://blog.csdn.net/dinglang_2009/article/details/31450731

 
 
三、FTP服务的安装与使用介绍
1、windows中安装使用FTP服务器请参考
http://blog.csdn.net/w1014074794/article/details/52075285
 
2、java上传文件到FTP服务器工具类
所需jar包    commons-net-1.4.1.jar
http://files.cnblogs.com/files/cczheng-666/commons-net-1.4.1.zip
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8.  
  9. import org.apache.commons.net.ftp.FTP;
  10. import org.apache.commons.net.ftp.FTPClient;
  11. import org.apache.commons.net.ftp.FTPFile;
  12. import org.apache.commons.net.ftp.FTPReply;
  13.  
  14. public class FtpUtil {
  15.  
  16. /**
  17. * Description: 向FTP服务器上传文件
  18. * @param host FTP服务器hostname
  19. * @param port FTP服务器端口
  20. * @param username FTP登录账号
  21. * @param password FTP登录密码
  22. * @param basePath FTP服务器基础目录,需要绝对路径 比如:/home/ftpuser/www/images
  23. * @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
  24. * @param filename 上传到FTP服务器上的文件名
  25. * @param input 输入流
  26. * @return 成功返回true,否则返回false
  27. */
  28. public static boolean uploadFile(String host, int port, String username, String password, String basePath,
  29. String filePath, String filename, InputStream input) {
  30. boolean result = false;
  31. FTPClient ftp = new FTPClient();
  32. try {
  33. int reply;
  34. ftp.connect(host, port);// 连接FTP服务器
  35. // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
  36. ftp.login(username, password);// 登录
  37. reply = ftp.getReplyCode();
  38. if (!FTPReply.isPositiveCompletion(reply)) {
  39. ftp.disconnect();
  40. return result;
  41. }
  42. //切换到上传目录
  43. if (!ftp.changeWorkingDirectory(basePath+filePath)) {
  44. //如果目录不存在创建目录
  45. String[] dirs = filePath.split("/");
  46. String tempPath = basePath;
  47. for (String dir : dirs) {
  48. if (null == dir || "".equals(dir)) continue;
  49. tempPath += "/" + dir;
  50. if (!ftp.changeWorkingDirectory(tempPath)) {
  51. if (!ftp.makeDirectory(tempPath)) {
  52. return result;
  53. } else {
  54. ftp.changeWorkingDirectory(tempPath);
  55. }
  56. }
  57. }
  58. }
  59. //设置上传文件的类型为二进制类型
  60. ftp.setFileType(FTP.BINARY_FILE_TYPE);
  61. //上传文件
  62. if (!ftp.storeFile(filename, input)) {
  63. return result;
  64. }
  65. input.close();
  66. ftp.logout();
  67. result = true;
  68. } catch (IOException e) {
  69. e.printStackTrace();
  70. } finally {
  71. if (ftp.isConnected()) {
  72. try {
  73. ftp.disconnect();
  74. } catch (IOException ioe) {
  75. }
  76. }
  77. }
  78. return result;
  79. }
  80.  
  81. /**
  82. * Description: 从FTP服务器下载文件
  83. * @param host FTP服务器hostname
  84. * @param port FTP服务器端口
  85. * @param username FTP登录账号
  86. * @param password FTP登录密码
  87. * @param remotePath FTP服务器上的相对路径
  88. * @param fileName 要下载的文件名
  89. * @param localPath 下载后保存到本地的路径
  90. * @return
  91. */
  92. public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
  93. String fileName, String localPath) {
  94. boolean result = false;
  95. FTPClient ftp = new FTPClient();
  96. try {
  97. int reply;
  98. ftp.connect(host, port);
  99. // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
  100. ftp.login(username, password);// 登录
  101. reply = ftp.getReplyCode();
  102. if (!FTPReply.isPositiveCompletion(reply)) {
  103. ftp.disconnect();
  104. return result;
  105. }
  106. ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
  107. FTPFile[] fs = ftp.listFiles();
  108. for (FTPFile ff : fs) {
  109. if (ff.getName().equals(fileName)) {
  110. File localFile = new File(localPath + "/" + ff.getName());
  111.  
  112. OutputStream is = new FileOutputStream(localFile);
  113. ftp.retrieveFile(ff.getName(), is);
  114. is.close();
  115. }
  116. }
  117.  
  118. ftp.logout();
  119. result = true;
  120. } catch (IOException e) {
  121. e.printStackTrace();
  122. } finally {
  123. if (ftp.isConnected()) {
  124. try {
  125. ftp.disconnect();
  126. } catch (IOException ioe) {
  127. }
  128. }
  129. }
  130. return result;
  131. }
  132. }

  

 

nginx+ftp搭建图片服务器(Windows Server服务器环境下)的更多相关文章

  1. Windows Server 2008环境下Apache2.4+Tomcat8配置

    安装步骤 1. 安装配置JDK2. 安装配置Apache3. 安装配置Tomcat4. 启动服务并测试 一.Apache安装与配置 1.Apache解压在D盘根目录下建立一个文件夹Apache Gro ...

  2. 如何在Windows Server 2008 R2下搭建FTP服务

    在Windows Server 2008 R2下搭建FTP服务,供客户端读取和上传文件 百度经验:jingyan.baidu.com 工具/原料 Windows Server 2008 R2 百度经验 ...

  3. Windows Server 服务器安全配置

    Windows Server 服务器安全配置 好吧,我标题党了.我只了解一些基本的安全配置.如果你是大湿,请绕道或者给予我严厉的批评让我进步谢谢. 编辑这篇文章用的编辑器编辑的,当我单击查看的时候发现 ...

  4. asp.net网站部署在云服务器windows server 2008上

    搭建一个网站需要以下4个准备: 1.域名解析 2.(云)服务器 3.数据库 4.网站代码 其中1可以可以去DNSPOD申请,同时需要进行备案,在上面就都可以完成.2用的是阿里云服务器windows s ...

  5. 阿里云服务器Windows Server 2008/2012部署Office Web Server 2013

    以前成功将Office Web Server 2013部署在了本地服务器上,此次是将Office Web Server 2013部署在阿里云服务器Windows Server 2008和2012上,中 ...

  6. windows server服务器上mysql远程连接失败的坑

    windows server服务器上mysql远程连接失败的坑 背景:趁这阿里云活动,和朋友合伙买了个服务器,最坑的是没想到他买的是windows Server的,反正便宜,将就着用吧,自己装好了wa ...

  7. windows server 服务器添加免费域名证书的方法(Let's Encrypt)

    在 windows server 服务器上可以通过 win-acme工具添加ssl 1.首先下载工具 https://github.com/PKISharp/win-acme/releases 最新版 ...

  8. 使用Windows系统远程连接Windows server服务器

    点击开始菜单->运行 (或者 windows+R) ,输入"mstsc"命令,  打开远程桌面连接对话框,输入你要连接的Windows server服务器的公网IP.  点击 ...

  9. 六. jenkins部署springboot项目(3)--windows环境--远程windows server服务器

    前提:jenkins服务器和windows server服务器不在一台机器上 对于jenkins服务器上编译好的jar或war包如何推送到windows server服务器上. 参照网上的,在wind ...

随机推荐

  1. BP神经网络及其算法优化

    大致原理和一种优化的方案,如下图,公式打字太麻烦,于是用手搞定.

  2. 简易RPC框架-学习使用

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  3. 【NLP】Python实例:申报项目查重系统设计与实现

    Python实例:申报项目查重系统设计与实现 作者:白宁超 2017年5月18日17:51:37 摘要:关于查重系统很多人并不陌生,无论本科还是硕博毕业都不可避免涉及论文查重问题,这也对学术不正之风起 ...

  4. 5、Java Swing布局管理器(FlowLayout、BorderLayout、CardLayout、BoxLayout、GirdBagLayout 和 GirdLayout)

    5.Java-Swing常用布局管理器       应用布局管理器都属于相对布局,各组件位置可随界面大小而相应改变,不变的只是其相对位置,布局管理器比较难以控制,一般只在界面大小需要改是才用,但即使这 ...

  5. C语言习题1.分别统计一下其中字母,数字,其他字符的个数。将统计的字母,数字,其他字符的个数以柱状图的形式打印

    从键盘上输入字符,(1)分别统计一下其中字母,数字,其他字符的个数, (2)将统计的字母,数字,其他字符的个数以柱状图的形式打印.例如 5 ***** *****     3 *****   **** ...

  6. 谈一谈Java8的函数式编程(二) --Java8中的流

    流与集合    众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...

  7. 【转】jQuery Validate验证框架详解

    jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 一.导入js库 <script type=& ...

  8. java日期工具类(Long型,Date型,yyyyMMdd型)等

    import java.sql.Timestamp; import java.text.ParsePosition; import java.text.SimpleDateFormat; import ...

  9. 干货——基于Nop的精简版开发框架(附源码)

    .NET的开发人员应该都知道这个大名鼎鼎的高质量b2c开源项目-nopCommerce,基于EntityFramework和MVC开发,拥有透明且结构良好的解决方案,同时结合了开源和商业软件的最佳特性 ...

  10. window.opener的用法

    window.opener 主要用来打开窗体的父窗体,可以通过这种方式设置父窗体的值或者调用js方法. 例如: 1,window.opener.test(); ---调用父窗体中的test()方法 2 ...