为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Unity3D 中使用 PUT 方法更新用户图片

如何在 Unity3D 中使用 PUT 方法更新用户图片

C#
海绵宝宝撒 2022-08-20 17:10:10
我是Unity3D的初学者;我必须开发一个移动应用程序,我需要管理用户个人资料数据;我必须使用REST服务与服务器通信这些数据。当我从我的应用程序发送Json(例如姓名,电子邮件,电话号码等)时,一切正常,但我无法更新个人资料图片。我需要的是:内容类型=多部分/表单数据键=“profile_picture”,值=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)从邮递员上传正确工作(2)任何类型的帮助和代码建议将不胜感激。谢谢
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

使用 Put,您通常只发送文件数据,而不发送表单。


您可以使用 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!");

    }

}

使用多部分表单文件部分


或者,您可以使用 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"));


查看完整回答
反对 回复 2022-08-20
  • 1 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信