Как загрузить изображение на сервер с помощью UnityWebRequest

#c# #http #unity3d

#c# #http #unity3d

Вопрос:

Я пытаюсь загрузить изображение, MultipartFormFileSection которое выдает мне внутреннюю ошибку сервера Http 500.

  IEnumerator Upload()
{
    List<IMultipartFormSection> pictureData = new List<IMultipartFormSection>();

    pictureData.Add(new MultipartFormFileSection("file", File.ReadAllBytes(ImageCapture.imageSavePath), "imageName", "image/jpg"));
    pictureData.Add(new MultipartFormFileSection("userId", "17ac4c482dcdd"));

    UnityWebRequest www = UnityWebRequest.Post(UploadImage_URL, pictureData);

    yield return www.SendWebRequest();

    if (www.isNetworkError || www.isHttpError)
    {
        Debug.Log(www.error);
    }
    else
    {
        Debug.Log("Form upload complete! "   www.downloadHandler.text);

    }
}
 

Ответ №1:

По неизвестным мне причинам это сработало путем замены MultipartFormFileSection на WWWForm .

Ниже приведен рабочий код.

 IEnumerator Upload()
{
    WWWForm form = new WWWForm();
    form.AddBinaryData("file", File.ReadAllBytes(Application.streamingAssetsPath   "/test.jpg"), "imageName.jpg");
    form.AddField("userId", "17ac4c482dcdd");

    UnityWebRequest www = UnityWebRequest.Post(UploadImage_URL, form);

    yield return www.SendWebRequest();

    if (www.isNetworkError || www.isHttpError)
    {
        Debug.Log(www.error);
    }
    else
    {
        Debug.Log("Form upload complete! "   www.downloadHandler.text);

    }
}
 

Комментарии:

1. Действительно, странно. Как вы можете видеть в API для MultipartFormSection перегрузки, которую он автоматически выбирает Content-Type = multipart/form-data , в то время как для WWWForm перегрузки он использует тот, который определен в WWWForm which "application/x-www-form-urlencoded" for normal forms and "multipart/form-data" for forms containing data added using AddBinaryData. , поэтому он должен быть таким же, верно?

2. да, вы правы. В моем предыдущем проекте я использовал MultipartFormSection , и это сработало. Но на этот раз мне нужно добавить несколько полей, идентификатор и имя, поэтому он начинает выдавать ошибку.