您的位置:首页 > 其它

记一次图片存储方式的修改(使用wcf和iis进行图片的上传和发布)

2013-08-18 20:41 260 查看
目前负责的一个项目,图片存储方式是将上传的图片存储在数据库中。这种存储方式造成的最直接影响就是,导致数据库数据文件过大基本无法备份,对数据库的性能也有很大的副作用,图片写入和读取的速度也是慢的惊人。有了问题就得修改,网上查了一通资料,结合项目的实际情况定下来一个方案。因为使用的是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;
}
}
  }


心得:

把获取图片url的接口放在wcf中,是为了将图片url生成的逻辑和业务系统分离,做改动更加方便。

文件实际存储的路径采用“盘符:\图片目录\日期\部门编号\图片文件名”的格式,以后若图片数据太多,可以将旧数据放到别的服务器上用iis或其他工具发布,wcf服务修改一下url的生成规则即可。

全部是.net平台的技术,.net程序员很容易搞定。

对于负载均衡和性能方面考虑的不多,目前项目够用,但对于高并发要求的系统,未必能达到要求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐