1

У меня есть конвертирование облачных конверсий, и когда он завершается, я говорю Azure BLOB Хранение для загрузки файла с его URL-адреса для преобразования, используя метод CloudBlockBlob.StartCopyAsync.Azure Blob Storage StartCopy с источником, указывающим на Cloud Convert

Должен сказать, это работало. Я не изменил ни одной строки кода, пока этот процесс не завершился.

Теперь, когда Azure пытается загрузить из Cloud Convert, он выходит из строя с сообщением 500 InternalServerError "Copy failed.". Если я копирую загрузку URL-адреса в браузере, он обычно загружает файл. Этот процесс работает с эмулятором хранения.

Мой вопрос: есть ли у кого-нибудь еще такая же проблема? Как это исправить? Нужно ли загружать файл и загружать его в Azure Blob Storage?

+0

Можете ли вы проследить запрос/ответ с помощью инструмента, такого как Fiddler? Можете поделиться URL-адресом, который мы можем попробовать? –

+0

@GauravMantri Azure Storage - это сервис. У меня нет доступа к серверу. Я мог бы сделать это с эмулятором, но эмулятор работает. Я могу отправить вам URL-адрес файла, который я пытаюсь загрузить, но похоже, что любой выходной URL-адрес из облачного конверта будет иметь тот же результат. –

+0

Можете ли вы отправить мне URL-адрес? Я попытаюсь имитировать то же самое. –

ответ

0

Но как только я проверяю CopyState, он говорит, что это не удалось с сообщением InternalServerError «Копия не удалась».

Во время тестирования на моей стороне я не столкнулся с этой ошибкой. Попробуйте отладить код и запишите подробную ошибку, чтобы узнать, не возникает ли эта ошибка в коде или на стороне сервера.

Должен сказать, это использовалось для работы. Я не изменил ни одной строки кода, пока этот процесс не завершился.

Согласно вашему описанию, я зарегистрировал учетную запись в Cloud Convert и преобразовал файл .pdf в файл .docx. Затем я протестировал его на моей стороне и получил тот же результат, что и Гаурав, который может быть создан успешно, однако размер 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

. Я думаю, вы меня неправильно поняли. Я использую конечную точку для запуска асинхронной копии файла. Я вызываю метод StartCopy в SDK и возвращает (или может возвращать), как только запрос получен лазурным, но перед завершением копирования (https://msdn.microsoft.com/en-us/library/azure/ dd894037.aspx). Я также конвертировал видео, но я не думаю, что тип файла ничего не меняет. Теперь в .NET SDK есть свойство в блобе под названием 'CopyState', которое указывает мне статус копии. Сообщение, которое я получил, было оттуда. Если где-то есть лучшее сообщение, я этого не знаю. –

+0

Я мог бы заставить его работать как в вашем примере. Я сделал это в другом проекте, который не использует Azure. Но поскольку я использую лазурь, я хочу, чтобы хранилище загрузило файл для меня. Я не хочу, чтобы видео проходило через мой сервер, если я могу его избежать. –

0

Вы смотрели в использовании Лазурном хранения библиотеки движения данных: Git Docs. В частности, см. TransferManager.CopyAsync(). Другое дело - изменить тип доступа в контейнере назначения.