UploadFile и UploadData WebClient не отправляют одинаковые заголовки (с данными multipart / form-data) - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь интегрировать загрузку файлов с API, который очень четко описывает, как они хотят отправлять данные:

Вы можете сделать запрос POST в формате multipart / form-data. Поле файла должно называться file.

Имея в виду У меня нет доступа к самому файлу (у меня есть byte[]) означает, что я не могу использовать WebClient.UploadFile(url, filePath).

Вместо этого у меня есть WebClient.UploadData(url, byte[]), который должен вписаться в мои потребности.

Дело в том, что если я использую метод UploadData вместо UploadFile, API чувствует, что он еще не отправлен ( обновил этот вопрос с дополнительной информацией ), чего не происходит с UploadFile метод.

Я указываю заголовки client.Headers["Content-Type"] = "binary/octet-stream", которые работают с методом UploadFile.

Я пытался с "multipart/form-data" без удачи. Я почти уверен, что мне не удается что-то, связанное с этой «заглавной вещью». Будем весьма благодарны за любую информацию или помощь.

Рабочий Метод WebClient UploadFile:

using (var client = new WebClient())
{
    client.Headers["Content-Type"] = "binary/octet-stream";
    string url = processUrl + $"?input=upload&format={file.Extension}&file={file.Name}";
    var result = client.UploadFile(url, fileData);

    return Encoding.UTF8.GetString(result, 0, result.Length);
}

Не работает Метод WebClient UploadData:

using (var client = new WebClient())
{
    client.Headers["Content-Type"] = "binary/octet-stream";
    string url = processUrl + $"?input=upload&format={file.Extension}&file={file.Name}";
    var result = client.UploadData(url, data);

    return Encoding.UTF8.GetString(result, 0, result.Length);
}

Я предпочел сосредоточиться на том, чтобы заставить его работать, а потом я просто перенесу его на async.

P.S .: Я нашел другие вопросы, подобные этому ( пример или пример ), но ни один из них не сработал.

РЕДАКТИРОВАТЬ : это то, что на самом деле Fiddler показывает с обоими запросами:

UploadFile-х:

POST https://heidi.infra.cloudconvert.com/process/950a6550-e4ba-46f2-8d20-7ffe7c0309c3?input=upload&format=pdf&file=c%3a%2ftemp%2fprueba.docx&email= HTTP / 1.1 Content-Type: multipart / form-data; border = --------------------- 8d68062f657b700 Хост: heidi.infra.cloudconvert.com Content-Length: 12842 Ожидается: 100-продолжение

----------------------- 8d68062f657b700 Content-Disposition: form-data; Name = "файл"; filename = "prueba.docx" Тип содержимого: двоичный файл / поток октетов

UploadData-х:

POST https://roberta.infra.cloudconvert.com/process/950a6550-e4ba-46f2-8d20-7ffe7c0309c3?input=upload&format=pdf&file=prueba.docx HTTP / 1.1 Content-Type: двоичный / октетный поток Хост: roberta.infra.cloudconvert.com Длина контента: 12652 Ожидается: 100-продолжение

Что ожидает API:

POST https://srv01.cloudconvert.com/upload/~Gl47wdgf6 Тип содержимого: многочастному / форм-данных; border = foo_bar_baz Content-Length: number_of_bytes_in_entire_request_body

- foo_bar_baz Content-Disposition: file; filename = "inputfile.jpg" Content-Size: 98344 Content-Type: application / octet-stream

... данные JPEG ...

...