1

我有云转换转换视频,当它完成时,我告诉Azure BLOB存储使用方法CloudBlockBlob.StartCopyAsync从它的转换输出URL下载文件。Azure Blob存储StartCopy源指向云转换

我必须说,这用于工作。在这个过程开始失败之前,我没有改变任何一行代码。

现在,无论Azure何时尝试从云端转换下载,它都会失败,并显示消息500 InternalServerError "Copy failed."。如果我将下载的URL复制到浏览器中,它会正常下载文件。该过程适用于存储模拟器。

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

+0

你可以通过像Fiddler这样的工具来追踪请求/响应吗?可能会分享我们可以尝试的网址吗? –

+0

@GauravMantri Azure存储是一项服务。我无法访问服务器。我可以用模拟器来做,但模拟器工作。我可以向您发送我正在尝试下载的文件的URL,但看起来云转换的任何输出网址都会有相同的结果。 –

+0

你可以给我发送网址吗?我会尝试模拟相同的。 –

回答

0

但是,一旦我检查CopyState它说它失败,消息InternalServerError“复制失败。”

在测试期间,我没有遇到这个错误。请尝试调试您的代码并捕获详细错误,以查看此错误是在您的代码还是服务器端引发的。

我必须说,这用于工作。在这个过程开始失败之前,我没有改变任何一行代码。

根据您的描述,我在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()); 
} 
+0

我想你误解了我。我正在使用端点来启动文件的异步副本。我在SDK中调用StartCopy方法,一旦azure接收到请求,但在复制完成之前它立即返回(或返回)(https://msdn.microsoft.com/zh-cn/library/azure/ dd894037.aspx)。我也转换了视频,但我不认为文件的类型会改变任何内容。现在,在.NET SDK中,blob中有一个名为'CopyState'的属性,它指示了副本的状态。我得到的消息是从那里。如果有更好的信息,我不知道。 –

+0

我可以让它在你的例子中工作。我在另一个不使用Azure的项目中这样做。但是由于我使用了天蓝色,我希望存储为我下载文件。如果我能避免它,我不希望视频通过我的服务器。 –

0

有你看着使用Azure存储数据移动图书馆:Git Docs。具体来说,请参阅TransferManager.CopyAsync()。另一个需要研究的是改变目标容器的访问类型。