zoukankan      html  css  js  c++  java
  • 通过FileWatcher,监听通过web上传的图片,并进行压缩

    需求是这样的,通过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();
    }
     
    启动调试,貌似正常运行,安心睡觉去。。。
  • 相关阅读:
    Karen and Game CodeForces
    Array and Segments (Easy version) CodeForces
    Diverse Garland CodeForces
    Nice Garland CodeForces
    Divisors of Two Integers CodeForces
    Two distinct points CodeForces
    Unique Snowflakes UVA
    Codeforces Round #534 (Div. 2)D. Game with modulo-1104-D(交互+二分+构造)
    关于排列组合问题的基础补充
    杭电 rescue(经典广搜)(深搜广搜对比)
  • 原文地址:https://www.cnblogs.com/Zoya/p/4356665.html
Copyright © 2011-2022 走看看