PostAsync HttpRequestException: не удается декодировать необработанные данные
Я пытаюсь создать функцию для загрузки файла (pdf, docx, xls) в HTTP API. Я пробовал с Postman, и он работал нормально. Но когда пытаюсь из приложения, не работает.
private async Task UploadFile()
{
String fileguid = this.noteModel.Fileguid.ToString();
try
{
var file = await CrossFilePicker.Current.PickFile();
if (file == null)
return;
string fileName = file.FileName;
string url = App.apiServer + "web/Token13/" + App.token + "/" + fileguid;
var content = new MultipartFormDataContent();
content.Headers.ContentType.MediaType = "multipart/form-data";
content.Add(new StreamContent(file.GetStream()), "file", fileName);
var httpClient = new HttpClient();
var response = await httpClient.PostAsync(url, content);
String status = response.StatusCode.ToString();
}
catch (Exception ex)
{
System.Console.WriteLine("Exception choosing file: " + ex.ToString());
}
}
У меня следующая ошибка в строке
'var response = await httpClient.PostAsync(url, content);'
:
2021-02-12 20:03:58.805 Project.iOS[2202:520692] Exception choosing file: System.Net.Http.HttpRequestException: cannot decode raw data --->
Foundation.NSErrorException: Error Domain=NSURLErrorDomain Code=-1015 "cannot decode raw data"
UserInfo={NSLocalizedDescription=cannot decode raw data,
NSErrorFailingURLStringKey=http://ip/appservertest/web/Token13/id,
NSErrorFailingURLKey=http://ip/appservertest/web/Token13/id,
_NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <FD8D1034-CF42-41C8-A214-BE4D87D1D15D>.<1>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <FD8D1034-CF42-41C8-A214-BE4D87D1D15D>.<1>, NSUnderlyingError=0x282880000 {Error Domain=kCFErrorDomainCFNetwork Code=-1015 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x2805e64e0 [0x1f6084660]>{length = 16, capacity = 16, bytes = 0x100200505991f6e00
000000000000000}}}}
--- End of inner exception stack trace ---
at System.Net.Http.NSUrlSessionHandler.SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x001d4] in /Library/Frameworks/Xamarin.iOS.framework/Versions/14.2.0.12/src/Xamarin.iOS/Foundation/NSUrlSessionHandler.cs:527
at System.Net.Http.HttpClient.FinishSendAsyncBuffered (System.Threading.Tasks.Task`1[TResult] sendTask, System.Net.Http.HttpRequestMessage request, System.Threading.CancellationTokenSource cts, System.Boolean disposeCts) [0x0017e] in /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/src/Xamarin.iOS/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpClient.cs:506
at Project.Views.NotesEdit.UploadFile () [0x0018f] in C:\Repository\Project\Project\Views\NotesEdit.xaml.cs:268
Подскажите, пожалуйста, почему не работает?
Заранее спасибо!
1 ответ
Решение
Похоже, вы не завершили заголовок
MediaTypeHeaderValue
. Это работает для меня:
var content = new StreamContent(stream);
content.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
FileName = imageName,
Name = imageName
};
content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
var multipartContent = new MultipartFormDataContent();
multipartContent.Add(content);
var result = await client.PostAsync(url, multipartContent.Add);