gpt4 book ai didi

azure - 无法从 Azure 文件共享读取文件

转载 作者:行者123 更新时间:2023-12-03 03:07:22 25 4
gpt4 key购买 nike

我的应用程序具有批量上传功能,电子表格中的用户提供文件路径,例如 Client1/Creative Files/File1.jpg,这就是这些文件在云文件共享中的存储方式。批量上传过程将从该位置读取文件,如果找到,则将复制到 blob 存储并在数据库中创建一个条目。最初,我将所有内容都存储在 blob 存储中,因此读取文件非常简单。

CloudBlobContainer container = this.GetCloudBlobContainer();
var blob = container.GetBlockBlobReference(filePath);

由于我无法映射到 Blob 存储帐户的网络驱动器,因此我创建了一个新的存储帐户并创建了一个文件服务,因此我可以映射到 Windows 上的共享,以便用户直接从其上传文件机器。现在,我在从该共享中获取文件时遇到问题,因为它总是说文件不存在。

public CloudFileShare GetCloudFileShare()
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(settings.AzureDropBoxConnectionString);
CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
CloudFileShare filehare = fileClient.GetShareReference(settings.AzureDropboxFileShare);
filehare.CreateIfNotExists();

return filehare;
}
public CloudFile GetFileFromCloudShare(string filePath)
{
CloudFileShare fileShare = this.GetCloudFileShare();
var file = fileShare.GetRootDirectoryReference().GetFileReference(filePath);

return file;
}

当我检查 file.Exists() 时,尽管文件已存在,但它返回“False”。

文件路径为 Client1/Creative Files/File1.jpg。我想如果我只是将 File1.jpg 上传到共享而没有文件夹,这应该可以工作,但添加子文件夹会产生问题。我们需要组织文件,并且可能有一些基于客户端以及用户如何组织它们的嵌套文件夹,这就是我们要求他们在电子表格中提供路径的原因。我错过了什么?

当我调试应用程序并检查文件 StorageUri 时,我看到 https://storageaccount.file.core.windows.net/sharename/Client%5CCreative%20Files%5CFile1.jpg

在浏览器上复制此网址后,我看不到该文件。就像我说的,对于 blob 容器,相同的过程仅适用于文件,但是当我将文件移动到文件共享时,我无法返回文件。

最佳答案

  1. 我尝试指定 Client1\\Creative Files\\File1.jpg 以及 Client1/Creative Files/File1.jpg,并且在这两种情况下我将 file.Exists() 设置为 true。您能否再次确认该文件确实存在。

  2. 您根本无法获取文件 URL 并将其粘贴到浏览器中并期望看到该文件显示在浏览器中。在 Blob 存储中,您可以将容器的 ACL 设置为 BlobContainer,然后当您在浏览器的地址窗口中复制 Blob 的 URL 时,Blob 将显示在此处。另一方面,文件共享始终是私有(private),并且需要授权对文件的访问。您可以做的一件事是在文件上创建共享访问签名 (SAS),然后将 SAS URL 复制到浏览器的地址窗口中,然后您就可以看到该文件。

        var cred = new StorageCredentials(accountName, accountKey);
    var account = new CloudStorageAccount(cred, true);
    var client = account.CreateCloudFileClient();
    var fileShare = client.GetShareReference("temp");
    var rootDirectory = fileShare.GetRootDirectoryReference();
    var file1 = rootDirectory.GetFileReference("Client1\\Creative Files\\test.png");
    Console.WriteLine(file1.Exists());
    var file2 = rootDirectory.GetFileReference("Client1/Creative Files/test.png");
    Console.WriteLine(file2.Exists());

    //Create shared access signature on file with read permission valid for 1 hour.
    var sasToken = file2.GetSharedAccessSignature(new SharedAccessFilePolicy()
    {
    Permissions = SharedAccessFilePermissions.Read,
    SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1)
    });
    var fileSasUrl = string.Format("{0}{1}", file2.Uri.AbsoluteUri, sasToken);
    Console.WriteLine(fileSasUrl);

关于azure - 无法从 Azure 文件共享读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43328361/

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