标签:
.Net图片系统就是 一个独立的图片站点,上传的的图片将被保存到站点本地文件系统或者基于fastdfs的分布式文件系统中,图片在查看时会直接请求此站点或者fastdfs的tracker服务器(需要nginx支持)。
如今一些系统都会提供图片上传功能,但是不同的系统,保存图片的方式也不尽相同。
1. 保存到站点内:上传的图片被保存到了站点目录下面,这种方式适合单系统或者简单多系统,实现方式简单,但是如果访问量大,图片请求就会占用网络和磁盘资源而影响网站本身的性能。
2. 保存到独立图片服务:图片被上传到独立的图片服务器上,图片服务器可以是单台,也可以是多台。
1. 单台 图片都上传到一台图片服务器上,但是如果图片服务器宕机,则会影响网站所有的图片访问,如果是磁盘损坏,则造成的损失可能是永久性的。并且如果访问量大, 也可能会造成瓶颈。
2. 多台 用多台服务器保存图片,每台服务器的图片都是相同的,前端通过负载均衡来选择任意一台,可以很好的解决宕机,磁盘损坏以及大量访问带来的问题,缺点是多台图片服务器要做同步,如果服务器较多,多台服务器的相互同步也是一个问题。
3. 保存到分布式文件服务器:本质上也是多台服务器,只是对多台服务器的磁盘进行了统一的管理。
1. 采用分布式的文件系统(FastDFS、HDFS、MogileFs、MooseFS、TFS等)来存储图片,在多台机器的基础上,提供了一个管理抽象层,可以很好解决多台服务器带来的相互同步问题。
4. 保存到CDN网络:
1. 以上几种方式都是将图片保存到了服务端,CDN网络可以将图片保存到离用户较近的地方,缩短传输距离。但是即使用了CDN,服务端也要用独立图片服务器或者分布式图片服务器,因为CDN有可能回源请求。并且并不是所有的图片都适合存放在CDN上,对于那些动态请求显示的图片还是需要放在服务端,比如用户头像。
1. 对于保存在站点内的方式,通常是在页面上放一个<input type=‘file‘>的标签,提交时将这些信息统一提交到后台,后台方法中通过如下的方式保存到本地。
var request = System.Web.HttpContext.Current.Request;
var file = request.Files[0];
string localPath = Path.Combine(HttpRuntime.AppDomainAppPath,"Upload");
string ex = Path.GetExtension(file.FileName);
string filePathName = Guid.NewGuid().ToString("N") + ex;
if (!System.IO.Directory.Exists(localPath))
{
System.IO.Directory.CreateDirectory(localPath);
}
file.SaveAs(Path.Combine(localPath, filePathName));
View Code
2. 对于独立的图片服务器, 我们需要将接收到的图片重新上传到图片服务器。 图片服务器可以可以采用IIS , 也可以采用Nginx。
3. 分布式图片服务器
图片将保存在分布式文件系统中, 比如FastDFS、HDFS、MogileFs、MooseFS、TFS等,因为分布式文件系统本身对文件进行了备份,所以不存在同步问题。
4. CDN网络
CND一般都是采用商用的, 当然像淘宝那样的,因为访问量太大, 据说是自建CDN。
当系统越来越多,系统中的图片也会越来越多,出于各方面的考虑,就需要一个独立的图片服务器。同时每当有一个上传图片的功能,就需要将file.SaveAs(Path.Combine(localPath, filePathName));这段代码再copy一次,并且如果没有做强制要求,大家对文件的命名规则也不相同。基于这种情况,我准备开发一套自己的图片系统,首先这个系统是一个独立的服务站点,可以将图片统一上传到这台服务器上,上传的图片可以保存到服务器本地磁盘,也可以保存到分布式文件系统中。同时,图片的上传保存功能将不再耦合在业务站点中,而是在页面前端直接通过CORS上传到图片服务器上,图片服务器返回图片的绝对地址(
http://image.xx.com/uplaod/11XX.jpg ),最后这个地址再随其他信息一起提交到业务站点,当信息被展示的时候,图片直接请求
http://image.xx.com/uplaod/11XX.jpg 。
开发语言为C#。
开发工具包括Visual studio 2013, fastdfs, nginx,webuploader。
基本适用于所有的web站点。
1. 用户选择要上传的图片,图片不经过业务服务器,而是直接通过CORS的方式上传到图片服务器。
2. 图片服务器将上传的图片保存到本地或者FastDFS中,返回保存的图片地址。
3. 图片地址随业务数据一起被提交到了业务站点。
4. 用户浏览业务数据。
5. 如果业务数据中含有图片, 则直接请求图片服务器或者tracker服务器。
6. tracker服务器会请求storage服务器获取图片。
1. 除了将图片服务器架构在IIS上,如果有条件,可以将图片服务器架构在nginx上, 并开启缓存模块和zero copy模式。当然开发语言需要改为Java或者php。
2. 实现了基本的上传保存功能,但是对图片不同尺寸剪裁, 压缩, 加水印,防盗链等还没有实现。
3. 本文说的是图片服务器, 但是对于小型的文件上传也可以采用这种方式 。
.Net简单图片系统-简介
标签:
原文地址:http://www.cnblogs.com/beyondbit/p/4763990.html