gpt4 book ai didi

c# - 观看上传文件夹的最佳实践?

转载 作者:可可西里 更新时间:2023-11-01 09:13:58 26 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

2年前关闭。




Improve this question




好吧,我手头上有一个有趣的问题。这里有一些背景:

我正在编写一个媒体库服务实现,它将为前端 Flash 播放器提供 URL。客户端希望能够通过将带有一些元数据的文件上传到 FTP 文件夹来将内容推送到服务中 - 我可以控制元数据模式。监视此文件夹的服务将选取任何新文件,将它们复制到“内容”文件夹中,然后将元数据和 url 推送到内容服务中的内容并放入数据库中。

内容服务没有问题,完成。正在看一个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)。

这一切都很好,但现在我遇到了左右两边的边缘情况!

我已经考虑到视频上传需要更长的时间,因此处理器将尝试获得排他锁,如果失败,它将将该项目移至队列的后面并移至下一个项目。
  • 如果服务崩溃或者那里已经有文件会发生什么?所以我写了一个方法来排队现有的文件。
  • 如果在排队现有文件时上传文件怎么办?希望它会处理这个?我是否应该定期重新扫描目录以查看是否遗漏了任何内容?

  • 任何人都可以为这种情况推荐最佳实践吗? filesystemwatcher 是一个好主意还是该服务应该定期扫描文件夹?

    编辑:只是给你一些规模的想法。我们总共讨论了 1000 个项目中的 10 个。可能是大块上传的。

    最佳答案

    FileSystemWatcher 是一种获得文件丢失早期可见性的实用方法,但有很多边缘情况会导致错过事件。您仍然需要定期扫描才能确定。

    避免尽可能多的互斥问题;客户端可以上传为 foo.xml.upload,然后在那里重命名为 foo.xml 吗?这将避免一个冗长的锁定文件......(你只需忽略 .upload 文件)。

    另外:当心“不是在这里发明的”......有许多现有的实用程序可以监视文件夹; BizTalk 的(一个矫枉过正的)例子。我不是说“不要自己做”,但至少要考虑预先 jar 头的选择。

    关于c# - 观看上传文件夹的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/589871/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com