Azure Blob存储StartCopy,源指向Cloud Convert

时间:2016-09-08 14:55:56

标签: azure azure-storage azure-storage-blobs internal-server-error

我有Cloud Convert转换视频,当它完成时,我告诉Azure BLOB 存储使用方法CloudBlockBlob.StartCopyAsync从转换输出网址下载文件。

我必须说,这曾经奏效。在此过程开始失败之前,我没有更改过一行代码。

现在,只要Azure尝试从Cloud Convert下载,它就会失败并显示消息500 InternalServerError "Copy failed."。如果我在浏览器中复制下载URL,则会正常下载文件。该过程适用于存储模拟器。

我的问题是,是否有其他人遇到同样的问题?我该如何解决?我是否需要下载文件并将其自行上传到Azure Blob Storage?

2 个答案:

答案 0 :(得分:0)

  

但是一旦我检查了CopyState,就说它失败并显示消息InternalServerError“Copy failed。”

在我身边测试期间,我没有遇到这个错误。请尝试调试代码并捕获详细错误,以查看代码或服务器端是否抛出此错误。

  

我必须说,这曾经奏效。在此过程开始失败之前,我没有更改过一行代码。

根据您的描述,我在Cloud Convert中注册了一个帐户,并将.pdf文件转换为.docx文件。然后我在我身边进行了测试并获得了与Gaurav相同的结果,表示blob可以成功创建,但是blob的大小是0字节。我假设Cloud Convert可能会进行一些调整。由于您可以在浏览器中下载该文件,因此您可以按照以下代码实现您的目的作为替代方法。

//pdf-to-docx.docx
url = "https://host123d1qm.cloudconvert.com/download/~7-9EyBedLQQyCoh41ONW6h1RpFY";
using (HttpClient client = new HttpClient())
{   
    //download the file via the URL provided by CloudConvert
    var response = await client.GetAsync(url);
    //define the block blob object
    string filename = response.Content.Headers.ContentDisposition.FileName.Trim(new char[] { '"' });
    string contentType = response.Content.Headers.ContentType.ToString();
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename);
    blockBlob.Properties.ContentType = contentType;
    //upload blob
    await blockBlob.UploadFromStreamAsync(await response.Content.ReadAsStreamAsync());
}

答案 1 :(得分:0)

您是否考虑过使用Azure存储数据移动库:Git Docs。具体来说,请参阅TransferManager.CopyAsync()。另一件需要考虑的事情是更改目标容器上的访问类型。