记一次图片存储方式的修改(使用wcf和iis进行图片的上传和发布)
2013-08-18 20:41
260 查看
目前负责的一个项目,图片存储方式是将上传的图片存储在数据库中。这种存储方式造成的最直接影响就是,导致数据库数据文件过大基本无法备份,对数据库的性能也有很大的副作用,图片写入和读取的速度也是慢的惊人。有了问题就得修改,网上查了一通资料,结合项目的实际情况定下来一个方案。因为使用的是windows平台,项目的开发环境是.net,于是决定采用wcf进行图片上传,图片以文件形式存储在服务器上,采用iis发布上传的图片。
上传流程:各种终端采集图片——>上传到网站应用程序——>网站应用程序调用wcf接口图片上传——>wcf将图片以文件形式存储在对应的图片服务器上,图片按日期和类别分文件夹存储
发布流程:在图片服务器上安装iis,新建虚拟目录指向图片存储的文件夹。终端(包括浏览器)请求图片——>网站应用程序调用wcf获取图片url接口——>将图片url返回给终端
部署方式:wcf部署在图片服务器上,和网站应用程序服务器在一个局域网内。
wcf服务代码:包括了上传图片,获取图片url,获取缩略图url,旋转图片4个接口。
心得:
把获取图片url的接口放在wcf中,是为了将图片url生成的逻辑和业务系统分离,做改动更加方便。
文件实际存储的路径采用“盘符:\图片目录\日期\部门编号\图片文件名”的格式,以后若图片数据太多,可以将旧数据放到别的服务器上用iis或其他工具发布,wcf服务修改一下url的生成规则即可。
全部是.net平台的技术,.net程序员很容易搞定。
对于负载均衡和性能方面考虑的不多,目前项目够用,但对于高并发要求的系统,未必能达到要求。
上传流程:各种终端采集图片——>上传到网站应用程序——>网站应用程序调用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程序员很容易搞定。
对于负载均衡和性能方面考虑的不多,目前项目够用,但对于高并发要求的系统,未必能达到要求。
相关文章推荐
- 使用delphi+intraweb进行微信开发2—intraweb以.net方式发布(以asp.net mvc4模式部署)在IIS(.net虚拟主机)上
- C# 使用FileUpload控件上传图片,将文件转换成二进制进行存储与读取
- java使用文件或字节数组方式加载图片,并修改图片后进行保存、输出等
- 使用delphi+intraweb进行微信开发2—intraweb以.net方式发布(以asp.net mvc4模式部署)在IIS(.net虚拟主机)上
- 在使用 AjaxFileUpload 上传文件时,在项目发布到 iis 后,图片不能预览
- WCF服务使用(IIS+Http)和(Winform宿主+Tcp)两种方式进行发布
- 使用map来进行票数统计工作,循环输入多个人名,作为key存储到map中,对应的value就是该人获得的票数(即重复输入的次数),当重复输入时,需要对相应的数据进行修改。最红输quit结束循环,打印
- 使用SmartUplaod实现图片上传,并给上传图片添加水印后将请求参数以对象的方式返回
- SpringMVC上传图片总结(2)--- 使用百度webuploader上传组件进行上传图片
- WCF开发实战系列二:使用IIS发布WCF服务
- 使用WCF进行跨平台开发之二(IIS托管WCF服务并使用php平台调用)
- 通过Ajax方式上传文件,使用FormData进行Ajax请求
- 如何使用花生壳 发布WCF服务 进行外网访问
- WCF 使用Stream模式进行文件上传 --节选自Packt.Net.Framework.4.5.Expert.Programming.Cookbook
- C# 通过WebService方式 IIS发布网站 上传文件到服务器的虚拟机下 详尽方法
- 小存储嵌入式设备上使用thttpd进行文件上传遇到的问题
- [课堂实践与项目]手机QQ客户端--4期(SQLite的加入,注册,找回,登录界面的修改):建立关于QQ注册类,使用SQLite进行存储,
- Android开发中使用七牛云存储进行图片上传下载
- WCF开发实战系列二:使用IIS发布WCF服务
- 使用okhttp进行图片下载,上传,get,post网络请求