网站搜索

c# - “此文件被阻止,因为它来自另一台计算机” - ajax 权限问题


我正在通过从我的网站下载的 HTML 使用 jQuery ajax 获取本地 XML 文件。

问题是,每次文件被下载时,用户都必须右键点击它 -> 属性 -> 解锁。否则,jquery ajax 会抛出“权限被拒绝”错误。

有没有办法将文件标记为受信任或类似的?我在下载文件时应该在服务器端实现什么吗?还是在保存的 HTML 文件的客户端添加什么?提前感谢。

答案#1

NTFS 文件系统会给此文件附加一个不安全标志。您可以使用 Sysinternals 的一个名为 Streams 的工具来移除这个标志。您可以从以下位置下载 Streams:

http://technet.microsoft.com/en-us/sysinternals/bb897440.aspx

然后使用 Process 类,你可以运行 streams -d <file.xml> 命令来移除这个标志,在你获取文件之后。运行方法如下:

Process runcommd = new Process();

runcommd.StartInfo.FileName = "streams";
runcommd.StartInfo.Arguments = " -d \"fullpath\\file.xml\"";

runcommd.StartInfo.UseShellExecute = false;
runcommd.StartInfo.CreateNoWindow = false;

runcommd.StartInfo.RedirectStandardError = true;
runcommd.StartInfo.RedirectStandardOutput = true;
runcommd.StartInfo.RedirectStandardInput = true;

// now run it
runcommd.Start();

// be sure that we end
runcommd.StandardInput.Flush();
runcommd.StandardInput.Close();

这些流来自微软网站,所以它是官方且可信的来源,而且它只是一个从文件中移除这个标记的工具。我认为你可以做好你的工作。

相关链接: https://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a

http://www.k9ivb.net/files/这个文件来自另一台计算机,可能已被阻止.pdf

答案#2

@Aristos 对于备用文件流问题的看法是正确的,然而这可以在不使用外部 EXE(streams.exe)的情况下完成。对于以后查看此内容的其他人,你可以运行以下命令来清空备用文件流(AFS):

echo. > my_blocked_file.zip:Zone.Identifier

假设我的文件名是 my_blocked_file.zip,这将清空 AFS 的内容。另外,你可以使用 dir /r 来列出 AFS,并使用 notepad my_blocked_file.zip:Zone.Identifier 来实际编辑它们。

这就是互联网区域标识符的样子:

[ZoneTransfer] 
ZoneId=3

关于这些流的更多阅读:http://msdn.microsoft.com/en-us/library/ff469212(v=prot.10)

以及各自的安全区域为:

  • 内联网: 区域ID=1
  • 受信任的站点: 区域ID=2
  • 互联网: 区域ID=3
  • 受限区域:ZoneId=4

此外,IE 似乎只有在打开/关闭会话时才会读取 AFS,所以你不能只是更改流然后刷新,你需要创建一个新的 IE 实例来重新读取新的 AFS。