【问题标题】:identify if the file is open before uploading in the fileupload control在文件上传控件中识别文件是否在上传之前打开
【发布时间】:2011-04-26 21:12:31
【问题描述】:

在 C# ASP.net 中使用 FileUpload Dialog 控件时,如何确定用户上传的文件在按下上传按钮之前是否已关闭。这将阻止用户将包含未保存数据的文件推送到服务器进行处理。

【问题讨论】:

    标签: c# asp.net file-upload


    【解决方案1】:

    AFAIK,你不能。该文件将:

    • A) 被推送而不刷新更改,或者
    • B) 如果无法打开文件以推送内容(即使用某种锁打开),则会导致问题 - 但是,发生这种情况的点很可能在“打开文件”对话框中,因此用户系统问题。

    【讨论】:

      【解决方案2】:

      这(在某种程度上)是可能的,但需要付出大量努力并密切控制最终用户环境,而这可能是不可能的。

      一般步骤如下:

      1:您可以使用虚拟文件系统,如 CBFS 或其他开源库(对不起,我没有 CBFS 以外的任何实际经验) - http://www.eldos.com/solutions/solutions-for-developers.php#commchannel

      2:创建虚拟文件系统,使其映射到数据库存储或服务器端存储

      3:将其映射为最终用户系统上的目录

      4:只要最终用户在此共享中创建和修改文件,或者您只接受来自此共享的文件,您就可以检查打开的文件句柄,如果是,则阻止上传

      【讨论】:

      • 感谢@Johnv2020。在与项目所有者讨论后,他们决定将该要求减少为一个消息框,警告用户确保文件已关闭。在开发阶段,这似乎是最聪明的方式。
      • 一旦项目所有者意识到解决方案需要花钱和花费时间,他们就会改变规范的方式令人惊叹,不是吗..
      【解决方案3】:

      这取决于用户如何编辑您的文件。例如 Word 和从 Windows Vista 或 7 开始的记事本确实会锁定文件,因此其他人无法对其进行写入。在这种情况下,只需打开可写文件并检查是否收到 IOException。

      static bool IsWriteProtected(string file)
      {
          try
          {
              using (File.OpenWrite(file)) ;
          }
          catch (UnauthorizedAccessException ex)
          {
              return true;
          }
      
          return false;
      }
      

      你的, 阿洛伊斯·克劳斯

      【讨论】:

      • 这只允许检查服务器端文件
      • 正确@m.edmondso 我需要在推送文件之前检查客户端。我的想法是创建一个 activeX 控件是不可能的,但我想与社区核实一下,看看是否有人设计了一种方法。
      • 抱歉。浏览器中的常规 Java 脚本似乎无法访问您的本地文件系统。如果您有足够的权利,那么此链接应该会有所帮助:c-point.com/JavaScript/articles/file_access_with_JavaScript.htm
      猜你喜欢
      • 2021-02-15
      • 1970-01-01
      • 2014-06-16
      • 2017-11-15
      • 1970-01-01
      • 2022-11-13
      • 2018-09-15
      • 1970-01-01
      • 2014-12-10
      相关资源
      最近更新 更多