使用Microsoft.WindowsAzure.Storage 2.1.0.3Azure存储复制斑点控制台应用程序 - 403 Forbidden错误
Attemping写conosle应用从一个Azure存储帐户移动文件到另一个帐户。应用程序使用sourceClient.ListContainers()列出所有容器,循环遍历foreach中的所有容器,为每个容器获取共享访问令牌,然后为每个Blob启动StartCopyFromBlob请求。目标blob具有相同的命名结构,但使用不同的帐户(例如sourceAzureUrl/testContainer/filename.ext - > destAzureUrl/testContainer/filename.ext)。
大部分文件(98%)复制都很好,但是当发送某些请求时,它会返回此异常:“远程服务器返回错误:(403)禁止。当创建CloudBlockBlob对目标blob的引用时,该URL似乎没有正确的URL转义,导致出现异常。但是,当此代码在MVC控制器内部运行时,请求以某种方式正确地被URL转义并且请求完成而没有错误。复制的blob也包含非转义名称。
看起来原因是blob/filename包含一个“[”和/或“]”字符(例如Roger_Smith [1] .doc)。如果文件名是事先进行了URL编码的,则请求完成时不会出错,但Azure存储中的文件名是其URL转义的化身,而不是原始文件名(Roger_Smith%255b1%255d.doc而不是Roger_Smith [1] .doc)。
有没有一种方法来正确的URL转义复制请求,仍然有结果blob有非转义的名称?
我们也遇到了+符号的问题。即使在.NET 4.0下我们也禁止403。 :( – ProVega