【问题标题】:File.Exists from UNC using Azure Storage/Fileshare via IIS results in false.通过 IIS 使用 Azure 存储/文件共享从 UNC 存在 File.Exists 会导致错误。
【发布时间】:2018-04-04 18:25:36
【问题描述】:

问题: 试图从 azure 文件共享中获取图像以进行操作。我需要将文件作为 Drawing.Image 读取以进行操作。我无法使用 uncpath 创建有效的 FileInfo 对象或图像(我需要这样做才能通过 IIS 使用)

当前设置: 在 IIS 网站中附加一个名为 Photos 的虚拟目录,指向 Azure 文件共享的 UNCPath(例如 \myshare.file.core.windows.net\sharename\pathtoimages) 这是http://example.com/photos/img.jpg,所以我知道这不是权限或身份验证问题。

由于某种原因,我无法获得对 File 的引用。

var imgpath = Path.Combine(Server.MapPath("~/Photos"),"img.jpg") \\resolves as \\myshare.file.core.windows.net\sharename\pathtoimages\img.jpg var fi = new FileInto(imgpath); if(fi.exists) //this returns false 100% of the time var img = System.Drawing.Image.FromFile(fi.FullName);

问题是该文件从未被发现存在,即使我无法采用该路径并将其放在资源管理器窗口中并 100% 的时间返回 img.jpg。

有谁知道为什么这不起作用? 我是否需要使用 CloudFileShare 对象来读取我知道的文件?

【问题讨论】:

  • 几点。你在你的网络应用程序中使用用户模拟吗?另外,尝试读取文件,即使是几个字节。有时 fileinfo.exists 有奇怪的行为。你有例外吗?
  • 尝试 File.ReadAllBytes 导致我遇到不同的用户名/密码未验证类型错误,这确实是问题所在。这是有道理的,因为 server.mappath 现在使用的是与虚拟目录没有任何关系的 UNC。这导致我遇到了其他人的问题,这里的解决方案带来了快乐。 stackoverflow.com/questions/582988/… 感谢 Fabrizio 的建议。

标签: azure system.io.file fileshare


【解决方案1】:

事实证明,问题在于我需要将我的代码包装在一个 azure 文件共享用户 ID 的模拟中,因为此时虚拟目录根本没有真正发挥作用。

using (new impersonation("UserName","azure","azure pass"))
{
//my IO.File code
}

我使用了这里找到的这个家伙模拟脚本。 Can you explain why DirectoryInfo.GetFiles produces this IOException?

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多