zoukankan      html  css  js  c++  java
  • 关于分布式存储


    数据库中表的设计:
    存储的是对于的WebService的命名空间和类名,图如下:

    namespace PicStore {
        /// <summary>
        /// ProcessPicStore 的摘要说明
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
        // [System.Web.Script.Services.ScriptService]
        public class ProcessPicStore : System.Web.Services.WebService {
            [WebMethod(Description = "上传一个地址,由此创建文件")]
            public string CreatePath(string path) {
                string pathOrg = "upload/" + path;
                string realPath = Server.MapPath(pathOrg);
                if (!Directory.Exists(realPath)) {
                    Directory.CreateDirectory(realPath);
                }
                return realPath;
            }
            [WebMethod(Description = "存储图片")]
            public string UploadFile(byte[] fs, string filename, string path) {
                //创建文件
                string realPath = CreatePath(path) + "/" + filename;
                using (FileStream fss = new FileStream(realPath, FileMode.Create)) {
                    using (MemoryStream m = new MemoryStream(fs)) {
                        m.WriteTo(fss);
                    }
                }
                return "ok";
            }
        }
    }
    主服务器端的上传的一般处理程序
    public class upload2 : IHttpHandler {
            public void ProcessRequest(HttpContext context) {
                context.Response.ContentType = "text/html";
                HttpPostedFile file = context.Request.Files[0];
                //获取文件名及扩展名
                string filename = Path.GetFileName(file.FileName);
                string ext_name = Path.GetExtension(file.FileName); //图片扩展名
                byte[] b = new byte[file.ContentLength];
                using (Stream fs = file.InputStream) {
                    fs.Read(b, 0, file.ContentLength);
                }
                string path = GetDir(filename);
                #region 分布式图片上传实现方案
                BookShop.BLL.ServerInfo bll = new BookShop.BLL.ServerInfo();
                //获取有效服务器数量
                int count = bll.GetValidServerCount();
                
                int index = Guid.NewGuid().ToString().GetHashCode() % count + 1;
                //随机获取服务器
                BookShop.Model.ServerInfo model = bll.GetServerInfoByNumber(index);
                Type t = Type.GetType(model.WebInstanceName);//获取服务器上对应的webservice的接口
                object o = Activator.CreateInstance(t); //反射创建对象
                MethodInfo m = t.GetMethod("UploadFile"); //用反射调用方法
                context.Response.Write(index+"<br/>");
                context.Response.Write(m.Invoke(o, new object[] { b, filename, path }));
                context.Response.Write("<br/>"+model.ServerIP);
                #endregion
            }
            /// <summary>
            /// 校验扩展名
            /// </summary>
            /// <returns></returns>
            public bool CheckExtName(string ext_name) {
                bool b = ext_name.Equals(".jpg"StringComparison.OrdinalIgnoreCase) ||
                     ext_name.Equals(".png"StringComparison.OrdinalIgnoreCase) ||
                     ext_name.Equals(".jpeg"StringComparison.OrdinalIgnoreCase);
                return b;
            }
            /// <summary>
            /// 目录分离算法
            /// </summary>
            /// <param name="filename"></param>
            /// <returns></returns>
            public string GetDir(string filename) {
                int hasCode = filename.GetHashCode();
                int dir1 = hasCode & 0xf;
                int dir2 = hasCode >> 4 & 0xf;
                return dir1 + "/" + dir2;
            }
            public bool IsReusable {
                get {
                    return false;
                }
            }
        }





  • 相关阅读:
    插入排序
    APPlication,Session,Cookie,ViewState和Cache之间的区别
    sqlserver 2005新特性
    选择排序
    Transact_SQL小手册
    装箱和取消装箱
    select语句的执行步骤:
    using 的三种用法
    创建索引及撤销
    (转译)用FFmpeg和SDL写播放器08软件缩放
  • 原文地址:https://www.cnblogs.com/dongqinglove/p/4610591.html
Copyright © 2011-2022 走看看