好的,我手上有一个有趣的问题。这里有一些背景:观看上传文件夹的最佳做法?
我正在编写一个媒体库服务实现,它将向前端Flash播放器提供URL。客户希望能够通过将带有一些元数据的文件上传到FTP文件夹中来将内容推送到服务中 - 我已经控制了元数据模式。观看这个文件夹的服务将拾取任何新文件,将它们复制到“内容”文件夹中,然后将元数据和网址按内容服务中的内容推送到数据库中。
内容服务不是问题,完成。看一个FTP文件夹是。
我目前的实现使用FileSystemWatcher对象和一个用于xml文件的过滤器。
每个内容项目可能有多个文件,例如高,中,低质量的视频。
我打算强制按进程或工具将内容组织到自己的文件夹中,只是为了简洁起见,但这不是真正的问题。
的XML文件看起来有点像这样:
<media>
<meta type="video">
<name>The Name Displayed</name>
<heading>The title of the video</heading>
<description>
A lengthy description about the video..
</description>
<length>00:00:19</length>
</meta>
<files>
<video file="somevideo.flv" quality="low"/>
<video file="somevideo.flv" quality="medium"/>
<video file="somevideo.flv" quality="high"/>
</files>
</media>
因此,当一个新的文件中创建FileSystemWatcher.Created事件触发。我有一个独立的线程运行来处理与主服务进程共享一个队列的内容(不要担心它使用生产者消费者模式,详细信息如下:http://msdn.microsoft.com/en-us/library/yy12yx1f.aspx)。
这一切都正常,但现在我遇到了左边和右边的情况!
我已经考虑到视频上传需要更长的时间,因此处理器会尝试获得排他锁定,如果失败,它会将项目移动到队列后面并移至下一个项目。
- 如果服务崩溃或者那里已经存在文件,会发生什么?所以我写了一个方法来排队现有的文件。
- 如果在排队现有文件时文件正在上载,该怎么办?希望它能处理这个问题?我应该定期重新扫描目录,看看我是否错过了任何东西?
任何人都可以推荐这种情况下的最佳做法吗?文件系统监视器是一个好主意,还是应该定期扫描文件夹?
编辑:只是想给你一些规模的想法。我们总共谈到10个1000个项目。可能上传大块。
我会看看第三方解决方案。我认为这里没有发明可能会涉及它。我已经被推荐使用Fluent Nhibernate,并被命令使用Linq to Sql代替。必须获得任何第三方的认可 - 需要一个年龄。 – 2009-02-26 10:37:20
@ RobStevenson-Leggett您是否找到第三方解决方案?还是你最终滚动自己的? – phuzi 2015-05-18 19:53:16