上传图片至多服务器,图片共享问题
2015-09-25 21:09
197 查看
问题描述
Web服务器有多个,访问网站时随机指定一个服务器提供访问服务。那么当我们涉及到对数据库的Select、Update、Delete以及Insert就需要指定一个数据库了。实现方法完全可以通过设置配置文件来完成。比如:
<appSettings> <add key="DBTYPE" value="MySQL" /> <add key="MySQL" value="Database=wldb;Data Source=172.16.1.11;User Id=dahong;Password=dh;pooling=false;CharSet=utf8;port=3306" /> </appSettings>
就是令数据库连接字符串都指向同一个web服务器(或者数据库服务器)。
但是当我们上传图片时,就麻烦了。比如在服务器端接收到图片后,我是这样保存的:
//读取照片 HttpPostedFile file =HttpContext.Current.Request.Files[0]; string fileName = string.Empty; string ext = string.Empty;//文件后缀名 string filePath = string.Empty; if (file.ContentLength != 0) { <strong>filePath = Context.Server.MapPath("~/photo/");</strong> fileName = Path.GetFileName(file.FileName); ext = Path.GetExtension(file.FileName).ToLower(); if (!ext.Equals(".jpg") && !ext.Equals(".gif") && !ext.Equals(".png") && !ext.Equals(".bmp")) { Context.Response.Write("{\"count\":\"0\",\"records\":\"照片格式不正确,上传失败!\"}"); return; } if (file.ContentLength > 10485760) { Context.Response.Write("{\"count\":\"0\",\"records\":\"照片大于10M,上传失败!\"}"); return; } file.SaveAs(filePath + xkzzh + ext); }
按照我所写的,这样图片会保存到服务器端应用程序下面的photo文件夹下。Here:
这样的话。。。我要是有多个服务器,图片就是不是随机保存到某一台服务器上,这完全是靠运气访问之前的图片嘛
显然不合理,那么我采用和数据库同样的访问方式试试呢?我令
filePath = "http://172.16.1.11/wl/photo/";
是不可以的,SaveAs 会报错的。SaveAs 方法被配置为需要根路径
解决方案
最后同事给出了他们之前的解决方案:在存储图片的服务器上将photo设置为共享。在其他服务器上的应用程序下删除原有的photo,并建立photo虚拟目录。下面是具体做法:
1.设置共享文件夹
在存放图片的服务器上设置共享文件夹——就是那个photo文件夹2.删除多余的同名文件夹
将其他服务器上的应用程序下的photo删除3.建立虚拟目录
在其他服务器上的应用程序下,建立虚拟目录需要注意:
1.虚拟目录的名称必须和原有名称一致,例如这里必须是"photo"
2.物理路径必须指向图片服务器下的photo文件夹,必须可访问
3.必须可访问可以通过设置身份验证方式,如下:
这里的用户名、密码都是访问图片服务器的用户名和密码。比如我这里就是和远程登录的用户名和密码一致。
4.设置配置文件
这样就设置好了,但运行时还是出错,好像是权限问题。可以通过设置配置文件来解决。在配置文件中加入:<identity impersonate="true" userName="Administrator" password="mima"/>
5.原有的程序代码不用修改
奏是这么任性!总结
OK,可以咯相关文章推荐
- [LeetCode]H-Index II
- java+jsp实现分页查询
- CSS框架960Grid从入门到精通一步登天
- 黑盒测试、灰盒测试、白盒测试
- 联赛联考3
- Servlet 上传文件
- HTTP协议 (三) 压缩
- js的数据处理记录
- 黑马程序员—Java概述
- C基础--栈的静态和动态生成
- libc、glibc和glib
- QT5--arm移植
- iOS跑马灯效果的源代码
- c++当某个函数很长时,却不想分写多个函数的解决办法
- 素数筛选法的进一步升级
- 如何申请Fusion 360 免费版
- 左右c++与java中国的垃圾问题的分析与解决
- UVa 12657 Boxes in a Line(应用双链表)
- Android中MediaButtonReceiver广播监听器的机制分析
- noip2010 接水问题 (模拟)