2017-06-30 59 views
1

我试图从Azure File Storage将文件下载到本地文件,并得到此异常:Azure CloudFile - “指定的资源名称包含无效字符。”

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

下面的代码:

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 
     } 
} 

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

"C:\Users\Me\AppData\Local\Temp\tmpF2AD.tmp" 

saveFrom的说法是这样的:

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

我创建使用此函数的参数:

var saveTo = Path.GetTempFileName(); 

我在做什么错?我对Azure没有太多经验。

+0

什么是“saveFrom”变量的值? –

+0

@GauravMantri ...请参阅我的更新,谢谢 –

回答

1

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

var file = tempDir.GetFileReference("tmpA2DA.tmp"); 

请你把这个改变,然后再试一次。它应该工作。

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

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); 
      } 
     } 
    } 
+0

这是因为'tempDir'有路径,对吧?谢谢 –

相关问题