• 通过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();
    }
     
    启动调试,貌似正常运行,安心睡觉去。。。
  • 相关阅读:
    本来一行可以代替的树节点搜索
    mssql 重新开始标识
    TabContainer实现服务器端回传
    CSS中图片路径的问题
    Javascript在IE下设置innerHTML时出现"未知的运行时错误"
    sql union和union all的用法及效率
    关于动态添加TabPanel遇到的问题以及思考
    关于linq to sql调用存储过程,出现"无法枚举查询结果多次"的问题
    SQL Server 2005连接服务器时的26号错误解决!
    SQL 2000和2005 获取两表的差集
  • 原文地址:https://www.cnblogs.com/Zoya/p/4356665.html
Copyright © 2020-2023  润新知