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

时间:2012-05-10 13:58:22

标签: c# javascript jquery asp.net

我通过从我的网站下载的html使用jQuery ajax获取本地xml文件。

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

有没有办法将文件标记为可信任或类似的东西?我应该在下载文件时在服务器端实现一些东西吗?或者在保存的html文件中添加客户端的内容?提前谢谢。

3 个答案:

答案 0 :(得分:6)

NTFS文件系统将此标志附加为不安全标志。您可以使用Sysinternals中名为Streams的一个实用程序来删除此标志。您可以从以下网址下载Streams:

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

然后使用Process class,您可以在获取文件后运行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();

Streams来自MS站点,因此它是官方和可靠的源,它只是一个从文件中删除此标志的实用程序。我认为你可以做你的工作。

相关: 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/This%20file%20came%20from%20another%20computer%20and%20might%20be%20blocked.pdf

答案 1 :(得分:1)

@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

并且各自的安全区域是:

  • 内联网:ZoneId = 1
  • 可信站点:ZoneId = 2
  • 互联网:ZoneId = 3
  • 受限制的网站:ZoneId = 4

此外,当您打开/关闭会话时,IE似乎只读取AFS,因此您无法更改流然后只是刷新,您需要创建一个新的IE实例来重新读取新的AFS。

答案 2 :(得分:0)

试一试。打开regedit,查找以下键/值:

HKEY_CURRENT_USER \ SOFTWARE \微软\的Windows \ CurrentVersion \政策\附件\ SaveZoneInformation

将此值设置为1并查看问题是否仍然存在。可能必须退出并重新确认,因为它是HKCU值。您仍然可能会再次收到此消息,但如果您使用此值再次取消阻止,则可能会阻止它再次发生。