需求是这样的,通过web传输过来的图片,无论是JS上传,还是其他的上传方式,都需要生成2张缩略图,分别是用于商品列表的小图small,和用于分享的小图share。基于不同上传方式的不同需求,使用exe程序可以简单适配所有情况,因此有以下的解决方案。
 
首先是简单的FileWatcher的使用,我们只需要监听Create事件即可。因为small和share均在同一个文件夹中,因此无需监控子文件夹的变化。
 
this.fileWatcher.Path = tbDir.Text;
fileWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.LastAccess | NotifyFilters.FileName | NotifyFilters.CreationTime;
fileWatcher.IncludeSubdirectories = false;
 
#region 触发事件
fileWatcher.Created += new FileSystemEventHandler(fileWatcher_Create);
#endregion
 
其中fileWather_Create是关键的实现方法,这里会有一个坑。文件上传需要考虑上传文件的完整性,即如果用以下代码获取图片信息,会因为图片大小不对,或者图片文件损坏,而导致图片压缩失败。
 
Image imgPhoto = Image.FromFile(filePath)
 
因此,这里我只能简单地认为,一张图片可以2分钟之内可以上传完毕(因为在上传之前,可以用过文字提示方式,提示用户不要上传太大的图片),简单地sleep一下。
 
Thread.Sleep(120 * 1000);
string filePath = e.FullPath; 
FileZip(filePath, e.Name);
 
在实现FileZip方法的时候,需要考虑Dispose图片文件,和使用GC清理缓存,否则会有可能出现内存不足现象。具体实现代码不在这里详述。
 
为了保证缩略图的完整性,监听文件夹的同时,使用定时器,每30分钟对所有的图片进行一次遍历检查,对未进行压缩的图片重新压缩。
 
while (true)
{
    Thread.Sleep(30 * 60 * 1000);
    AllFileZip();
}
 
启动调试,貌似正常运行,安心睡觉去。。。

通过FileWatcher,监听通过web上传的图片,并进行压缩的更多相关文章

  1. 文件下载Controller,文件夹内容监听,文件上传,运行程序通过url实现文件下载

    文件下载Controller @RequestMapping("/fileDownLoad") public ResponseEntity<byte[]> fileDo ...

  2. java实现服务端守护进程来监听客户端通过上传json文件写数据到hbase中

    1.项目介绍: 由于大数据部门涉及到其他部门将数据传到数据中心,大部分公司采用的方式是用json文件的方式传输,因此就需要编写服务端和客户端的小程序了.而我主要实现服务端的代码,也有相应的客户端的测试 ...

  3. weui上传多图片,前端压缩,base64编码

    记录一下在做一个报修功能的心路历程,需求功能很简单,一个表单提交,表单包含简单的文字字段以及图片 因为使用的是weui框架,前面的话去找weui的表单和图片上传组件,说实话,weui的组件写的还不错, ...

  4. 前端之web上传文件的方式

    前端之web上传文件的方式 本节内容 web上传文件方式介绍 form上传文件 原生js实现ajax上传文件 jquery实现ajax上传文件 form+iframe构造请求上传文件 1. web上传 ...

  5. 我需要在Web上完成一个图片上传的功能

    我需要在Web上完成一个图片上传的功能. 这个页面需要能从手机中选择图片上传. 首先,这个页面是从微信上面触发的,所以修改了微信的的入口地址,增加了身份识别号作为传参. 跳转到页面的时候,页面先检查身 ...

  6. 监听调试web service的好工具TCPMon

    监听调试web service的好工具TCPMonhttp://ws.apache.org/commons/tcpmon/download.cgi TCPMon Tutorial Content In ...

  7. 基于spring-boot的web应用,ckeditor上传文件图片文件

    说来惭愧,这个应用调试,折腾了我一整天,google了很多帖子,才算整明白,今天在这里做个记录和分享吧,也作为自己后续的参考! 第一步,ckeditor(本博文论及的ckeditor版本4.5.6)的 ...

  8. 第九篇:web之前端之web上传文件的方式

    前端之web上传文件的方式   前端之web上传文件的方式 本节内容 web上传文件方式介绍 form上传文件 原生js实现ajax上传文件 jquery实现ajax上传文件 form+iframe构 ...

  9. Web上传文件的原理及实现

    现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload.还有Struts1.x和Struts2中带的上传文件功能(实际上,Struts2 ...

随机推荐

  1. 学习记录 java 哈希

    哈希表(Hash Table,又叫散列表),是存储键值对(Key-value)的表,之所以不叫它Map(键值对一起存储一般叫做Map),是因为它下面的特性:它能把关键码(key)映射到表中的一个位置来 ...

  2. oracle 将查询到的数据插入表

    1. 新增一个表,通过另一个表的结构和数据 create table tab1 as select * from tab2 2. 如果表存在: insert into tab1 select * fr ...

  3. PHP isset()与empty()的区别

    PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, ...]] ) 功能:检测变量是否设置 返回值: 若变量不存在 ...

  4. gulp&gulp-less

    使用gulp-less插件将less文件编译成css,当有less文件发生改变自动编译less,并保证less语法错误或出现异常时能正常工作并提示错误信息. 1.本地安装gulp-less githu ...

  5. Android knock code analysis

    My colleague she forgot the knock code and ask me for help. I know her phone is LG G3 D855 with Andr ...

  6. Windows server 共享文件夹权限设置

    概念:共享权限应用于通过网络连接到共享文件夹的用户.共享权限不会影响本地登录或使用远程桌面登录的用户. 若要为本地登录用户或使用远程桌面登录的用户设置权限,请使用“安全”选项卡而不是“共享权限”选项卡 ...

  7. android应用商店完整版源码

    这个是从一个安卓学习的网站上转载过来的,android应用商店完整版源码,大家可以看看一下吧. _op><ignore_js_op> <ignore_js_op>< ...

  8. 一款非常简单的android音乐播放器源码分享给大家

    一款非常简单的android音乐播放器源码分享给大家,该应用虽然很小,大家常用的播放器功能基本实现了,可能有点还不够完善,大家也可以自己完善一下,源码在源码天堂那里已经有了,大家可以到那里下载学习吧. ...

  9. JavaScript高级 引用类型(二)《JavaScript高级程序设计(第三版)》

    五.Function类型 是JS中最重要的一种引用类型 构造方式:(三种) 函数声明: 函数表达式定义: 函数构造器: 没有重载: 如果有两个相同函数名的函数,执行时,执行最近被定义的一次. 函数声明 ...

  10. rsync 安装与配置

    1.什么是rsync Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的“Rsync算法”来使本地和远 程两个 ...