• 通过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();
    }
     
    启动调试,貌似正常运行,安心睡觉去。。。
  • 相关阅读:
    【转载wpf命令】
    【转载WPF资源】
    【转载MVVM模式的简介】
    【转载有关XmlAttribute的知识】
    【test7】stream、用于输入和输出的类、特性
    【补充作业】XML和LINQ
    CodeVS 1084 乒乓球
    android开发之屏幕旋转
    Android开发之新建项目报错的问题
    Android 开发获取用户权限
  • 原文地址:https://www.cnblogs.com/Zoya/p/4356665.html
Copyright © 2020-2023  润新知