Метод API в Xamarin не будет загружать изображения в папках на стороне сервера .Объем-основной
Привет!
У меня есть приложение xamarin, в котором я хочу загрузить изображение в папку на стороне сервера.Все вроде бы работает нормально, за исключением того, что изображение не сохраняется.Я проверил api,и все в порядке,я проверил серверную сторону,один только метод отлично работает с помощью Postman, поскольку он загружает изображение в папку, но когда я пытаюсь загрузить изображение с клиентской стороны, оно теряется где-то по пути.У меня нет никаких ошибок,которые могли бы указать мне на возможную ошибку в моем коде,поскольку изображение берется из эмулятора android,преобразуется в массив байтов, хранится в базе данных, но нигде не находится на стороне сервера папок.
Это мой класс моделей:
<pre> public class User { public int IdUser { get; set; } public string Name { get; set; } public string Email { get; set; } public string Password { get; set; } public string ConfPassword { get; set; } public DateTime Created { get; set; } = DateTime.Now; public DateTime? Dob { get; set; } public byte[] Picture { get; set; } public virtual ICollection<Login> Login { get; set; } }
Метод api серверного контроллера:
<pre> [HttpPost] public async Task Post(IFormFile file) { if (string.IsNullOrWhiteSpace(_environment.WebRootPath)) { _environment.WebRootPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"); } var uploads = Path.Combine(_environment.WebRootPath, "uploads"); if (!Directory.Exists(uploads)) Directory.CreateDirectory(uploads); if (file.Length > 0) { using (var fileStream = new FileStream(Path.Combine(uploads, file.FileName), FileMode.Create)) { await file.CopyToAsync(fileStream); } } }
веб-служба на стороне клиента:
<pre> public async Task UploadPictureAsync(MediaFile image,string fileName) { string pictureUrl = "http://10.0.2.2:5000/api/UploadPicture"; HttpContent fileStreamContent = new StreamContent(image.GetStream()); fileStreamContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data") { Name = "file", FileName = fileName }; fileStreamContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream"); HttpClientHandler clientHandler = new HttpClientHandler(); clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; }; using (var client = new HttpClient(clientHandler)) using (var formData = new MultipartFormDataContent()) { formData.Add(fileStreamContent); var response = await client.PostAsync(pictureUrl, formData); if(response.IsSuccessStatusCode) { // } } }
и командный метод виртуальной машины:
<pre> async Task UploadImage() { await CrossMedia.Current.Initialize(); // await CrossPermissions.Current.RequestPermissionAsync<CameraPermission>(); var mediaOptions = new PickMediaOptions() { PhotoSize = PhotoSize.Medium }; var selectedImageFile = await CrossMedia.Current.PickPhotoAsync(mediaOptions); using (var memoryStream = new MemoryStream()) { selectedImageFile.GetStream().CopyTo(memoryStream); Picture = memoryStream.ToArray(); await service.UploadPictureAsync(selectedImageFile,selectedImageFile.ToString()); } if (selectedImageFile == null) { await Application.Current.MainPage.DisplayAlert("Error", "Could not get file", "ok"); return; } }
Кто-нибудь сталкивался с подобной ситуацией и знает, как ее можно разрешить?Любая помощь будет оценена по достоинству.
Что я уже пробовал:
Я еще ничего не пробовал, так как понятия не имею, в чем может быть проблема...
Gerry Schmitz
Сначала заставьте его работать в консольном приложении.