您的位置:首页 > 其它

上传图片至多服务器,图片共享问题

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,可以咯
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: