Eliza Maria Ответов: 0

Метод 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

Сначала заставьте его работать в консольном приложении.

0 Ответов