zoukankan      html  css  js  c++  java
  • 记一次图片存储方式的修改(使用wcf和iis进行图片的上传和发布)

    目前负责的一个项目,图片存储方式是将上传的图片存储在数据库中。这种存储方式造成的最直接影响就是,导致数据库数据文件过大基本无法备份,对数据库的性能也有很大的副作用,图片写入和读取的速度也是慢的惊人。有了问题就得修改,网上查了一通资料,结合项目的实际情况定下来一个方案。因为使用的是windows平台,项目的开发环境是.net,于是决定采用wcf进行图片上传,图片以文件形式存储在服务器上,采用iis发布上传的图片。

    上传流程:各种终端采集图片——>上传到网站应用程序——>网站应用程序调用wcf接口图片上传——>wcf将图片以文件形式存储在对应的图片服务器上,图片按日期和类别分文件夹存储

    发布流程:在图片服务器上安装iis,新建虚拟目录指向图片存储的文件夹。终端(包括浏览器)请求图片——>网站应用程序调用wcf获取图片url接口——>将图片url返回给终端

    部署方式:wcf部署在图片服务器上,和网站应用程序服务器在一个局域网内。

    wcf服务代码:包括了上传图片,获取图片url,获取缩略图url,旋转图片4个接口。

    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
        [ServiceContract]
        public interface IPictureService
        {
            [OperationContract]
            void UploadPicture(RemoteFileInfo transferPic);
    
            [OperationContract]
            string GetPictureURL(string date, string depCode, string picName, out bool isExist);
    
            [OperationContract]
            string GetThumbPictureURL(string date, string depCode, string picName, out bool isExist);
    
            [OperationContract]
            void Rotate(string date, string depCode, string picName, string angle);
    
        }
    
        [MessageContract]
        public class ReturnInfo
        {
            [MessageHeader(MustUnderstand = true)]
            public string URL;
        }
    
    
        [MessageContract]
        public class RemoteFileInfo : IDisposable
        {
            /// <summary>
            /// 部门编码
            /// </summary>
            [MessageHeader(MustUnderstand = true)]
            public string DepCode;
    
            /// <summary>
            /// 日期,格式"20130808"
            /// </summary>
            [MessageHeader(MustUnderstand = true)]
            public string Date;
    
            /// <summary>
            /// 图片名称,与数据库图片表中的主键值相同,包括扩展名
            /// </summary>
            [MessageHeader(MustUnderstand = true)]
            public string PicName;
    
            /// <summary>
            /// 图片内容
            /// </summary>
            [MessageBodyMember(Order = 1)]
            public System.IO.Stream FileByteStream;
    
            public void Dispose()
            {
                if (FileByteStream != null)
                {
                    FileByteStream.Close();
                    FileByteStream = null;
                }
            }
      }

    心得:

    1. 把获取图片url的接口放在wcf中,是为了将图片url生成的逻辑和业务系统分离,做改动更加方便。
    2. 文件实际存储的路径采用“盘符:图片目录日期部门编号图片文件名”的格式,以后若图片数据太多,可以将旧数据放到别的服务器上用iis或其他工具发布,wcf服务修改一下url的生成规则即可。
    3. 全部是.net平台的技术,.net程序员很容易搞定。
    4. 对于负载均衡和性能方面考虑的不多,目前项目够用,但对于高并发要求的系统,未必能达到要求。
  • 相关阅读:
    登入界面的创建
    什么是IO流 以及文件输入输出
    java 的面向对象
    Mac 终端命令大全
    jQuery 的属性
    商城管理系统
    Java IO学习第二天部分详解
    Java IO学习第一天部分详解
    用JAVA描述一个车与修车厂两个事物
    JAVA基础(数组)数组排序和查找数组中是否还有某一个数
  • 原文地址:https://www.cnblogs.com/pengkun/p/3265856.html
Copyright © 2011-2022 走看看