一个图库软件的分享(一)

 

          曾经接了一个设计公司的图库软件项目,设计师做设计时,经常要参考一些素材,这些素材由各设计师按类别上传到公司服务器给大家分享,长期积累下素材数量达到了上百个分类,上万副图片,总共几百G的文件,设计师靠windows访问服务器来进行素材的查阅,很难找到理想中的素材。

 

         在架构的选型上,无非是BS和CS两种模式,BS模式是流行手法,但是文件上传功能始终觉得用户体验不好,同时也不支持按文件夹上传的功能,另一方面,客户端涉及到一系列的用户操作,而浏览器下的菜单开发也比较费劲,所以我采用了更传统的CS方式来实现图库,用java swing来实现图库的客户端,而服务端也开发相应的java服务。但swing开发对我来说是个比较大的挑战,首先没有实战经验,很多东西要现捣鼓,其次美工没法介入太多,很多效果都得自己调。但我相信一句话,那就是谁也不是生下来就能搞开发的,不会就学,所以挑战归根到底是个时间问题,不算难点。

 

         那么图库最基本的需求就是一方面能快速检索,令一方面也能支持分类管理和图片素材的上传。这些素材中,很多都是非常精美的效果图,单一文件非常大,基本都在四五m左右,最大的有60多m,如果要支持 络下的快速检索,那就只能使用缩略图了,于是自然的采用了一个非常优秀的缩略图软件JMagick。

 

 

我列出了一些问题,并且敲定了相关方案:

 

         如何实现文件上传nbsp;         

         既然选择了cs方式,只能自己实现文件上传了,也考虑了ftp的方式,但由于服务端需要将上传后的图片生成缩略图,ftp的服务端事件根本没法抓取,所以不如自己实现文件传输来得简单和可控。所以我采用了xsocket+自定义传输协议的方式来实现文件上传。

         因为通讯上涉及到很多种操作的交互,比如请求缩略图、上传文件、图片管理(删除、重命名等)、请求原始图片(下载原始图片)等等一系列操作,所以协议上还是采用了xml的方式,但现在来看,xml的打包和解析实际上太重量级,改为json数据结构会更好一些。一个合理的图片上传包数据应该包含文件名、文件长度、要上传到的分组以及图片字节流等内容。

 

         如何控制图片的展示/strong>

         用户要快速检索,那必须要求在一屏中能同时看到多幅(20幅)排好的图片,感兴趣的才打开浏览,那在这里展示缩略图是最好的,那这里缩略图就有一个排列和加载的问题,因为本身图片文件大小是不一致的,做成缩略图后图片大小也不一致,加载有快有慢,而且不希望按顺序挨个加载显示,最好的效果是打开一屏时,图片先用空位置占位,各个缩略图再独立加载,互不影响,加载完后自然显示

         既然缩略图要异步展示,那在 络通讯上,发起图片请求再等待服务器返回的方式就达不到效果了,那我干脆在每个客户端也像服务端一样,也设置TCP服务,客户端只管向服务端请求图片而不等待返回,而服务端收到图片请求后,按照客户端提供的“客户端服务”信息,将图片数据发送到对应客户端所在TCP服务端口。总之客户端只管请求就可以了。

 

 

 

 

 

 

 

 

     这样一个简单的缩略图格点展现就完成了。

     还有很多有趣的细节,在之后的博文会陆续分享,感兴趣的同学可以问我要源码,欢迎交流。

 

      界面示例见附件

 

 

相关资源:最强劲的加密软件TrueCrypt_Setup_7.1a_最强劲的越野车- 络攻防…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2012年4月1日
下一篇 2012年4月2日

相关推荐