Как обновить картинку пользователя методом PUT в Unity3D - PullRequest
0 голосов
/ 01 февраля 2019

Я новичок в Unity3D;мне нужно разработать мобильное приложение и мне нужно управлять данными профиля пользователя;я должен сообщить эти данные серверу, используя службы REST.Все отлично работает, когда я отправляю Json (например, имя, адрес электронной почты, номер телефона и т. Д.) Из моего приложения, но я не могу обновить изображение профиля.

Что мне нужно: Content-Type = multipart / form-data key = "profile_picture", value = file_to_upload (не путь)

Я много читал о работе в сети в Unity и пробовалразличные комбинации UnityWebRequest, List, WWWform, но, похоже, ничего не работает для этого типа службы PUT.

UnityWebRequest www = new UnityWebRequest(URL + user.email, "PUT");
    www.SetRequestHeader("Content-Type", "multipart/form-data");
    www.SetRequestHeader("AUTHORIZATION", authorization);
    //i think here i'm missing the correct way to set up the content

Я могу правильно смоделировать обновление от Postman, поэтому это не проблема с сервером;Я почти уверен, что проблема в том, что я не могу преобразовать эту логику в приложении.

Загрузка от Почтальона корректно работает (1)

enter image description here

Загрузить от Почтальона, правильно работающего (2)

enter image description here

Любая помощь и предложение кода будут оценены.Спасибо

1 Ответ

0 голосов
/ 01 февраля 2019

С Положить Вы обычно отправляете только данные файла, но без формы.

Вы можете добавить многочастную форму, используя UnityWebRequest.Post

IEnumerator Upload() 
{
    List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
    formData.Add(new MultipartFormFileSection("profile_picture", byte[], "example.png", "image/png"));

    UnityWebRequest www = UnityWebRequest.Post(url, formData);

    // change the method name
    www.method = "PUT"; 

    yield return www.SendWebRequest();

    if(www.error) 
    {
        Debug.Log(www.error);
    }
    else 
    {
        Debug.Log("Form upload complete!");
    }
}

с использованием MultipartFormFileSection


Или же вы можете использовать WWWForm

IEnumerator Upload()
{
    WWWForm form = new WWWForm();
    form.AddBinaryData("profile_picture", bytes, "filename.png", "image/png");

    // Upload via post request
    var www = UnityWebRequest.Post(screenShotURL, form);

    // change the method name
    www.method = "PUT";        

    yield return www.SendWebRequest();

    if (www.error) 
    {
        Debug.Log(www.error);
    }
    else 
    {
        Debug.Log("Finished Uploading Screenshot");
    }
}

с использованием WWWForm.AddBinaryData


Обратите внимание, что для аутентификации пользователя необходимо правильно кодировать свои учетные данные:

string authenticate(string username, string password)
{
    string auth = username + ":" + password;
    auth = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(auth));
    auth = "Basic " + auth;
    return auth;
}

www.SetRequestHeader("AUTHORIZATION", authenticate("user", "password"));

( Источник )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...