Я пытаюсь интегрировать загрузку файлов с 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 ...