Azure CloudFile - “指定的资源名称包含无效字符。”

Big*_*ddy 6 c# azure azure-storage azure-storage-blobs

我正在尝试将文件下载Azure File Storage到本地文件并出现此异常:

“指定的资源名称包含无效字符。”

这是代码:

if (_cloudFileShare.Exists())
{
      CloudFileDirectory rootDir = _cloudFileShare.GetRootDirectoryReference();    
      CloudFileDirectory tempDir = rootDir.GetDirectoryReference("temp");
      if (tempDir.Exists())
      {
        var file = tempDir.GetFileReference(saveFrom);
        file.DownloadToFile(saveTo, FileMode.Open);// OFFENDING LINE
      }
 }
Run Code Online (Sandbox Code Playgroud)

saveTo参数是一个字符串,值是这样的:

"C:\Users\Me\AppData\Local\Temp\tmpF2AD.tmp"
Run Code Online (Sandbox Code Playgroud)

saveFrom说法是这样的:

https://storageaccount.file.core.windows.net:443/fileshare/temp/tmpA2DA.tmp

我正在使用此函数创建参数:

var saveTo = Path.GetTempFileName();
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我对 Azure 没有太多经验。

Gau*_*tri 3

问题出在你的saveFrom变量上。它应该只包含文件名而不是整个 URL。因此,如果您尝试下载的文件是tmpA2DA.tmp,您的代码应该是:

var file = tempDir.GetFileReference("tmpA2DA.tmp");
Run Code Online (Sandbox Code Playgroud)

请进行此更改并重试。它应该有效。

这是我用来测试的完整代码:

    static void FileDownloadTest()
    {
        var cred = new StorageCredentials(accountName, accountKey);
        var account = new CloudStorageAccount(cred, true);
        var client = account.CreateCloudFileClient();
        var _cloudFileShare = client.GetShareReference("fileshare");
        if (_cloudFileShare.Exists())
        {
            CloudFileDirectory rootDir = _cloudFileShare.GetRootDirectoryReference();
            CloudFileDirectory tempDir = rootDir.GetDirectoryReference("temp");
            if (tempDir.Exists())
            {
                var saveTo = System.IO.Path.GetTempFileName();
                var file = tempDir.GetFileReference("tmpA2DA.tmp");
                file.DownloadToFile(saveTo, FileMode.Open);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)