我正试图通过团结将一个图像发送到服务器。我能够用以下代码通过命令提示符实现图像的发送:
curl -H "Authorization: Token 555myToken555" -F "id=Image01" -F "image=@/home/example.png" https://mywebsite.com但以同样的方式,我无法实现使用统一的Web请求。我在哪里提供"id=Image01“和http链接?Put()的性能也比Post()好吗?
public Texture2D tex;
UnityWebRequest unityWebRequest= UnityWebRequest.Put( tex, texture.EncodeToPNG());
unityWebRequest.SetRequestHeader("Authorization", "Token 555myToken555");
unityWebRequest.SendWebRequest();发布于 2021-04-13 09:50:51
首先,UnityWebRequest.Put的第一个参数不是ToString隐式返回tex.name的tex,而是URI!
然后注意到curl -F
(HTTP)允许curl模拟用户按下提交按钮的填充形式。--根据RFC2388,这会导致curl使用内容类型多部分/表单数据发布数据。这允许上载二进制文件等。
无论如何,这使用的是POST,而不是PUT。
在UnityWebRequest.Post中,您可以很容易地使用例如WWWForm和AddField以及AddBinaryData来添加表单部件。
public void UploadTexture(Texture2D tex)
{
StartCoroutine(UploadTextureRoutine(tex));
}
private IEnumerator UploadTextureRoutine(Texture2D tex)
{
var bytes = tex.EncodeToPNG();
var form = new WWWForm();
form.AddField("id", "Image01");
form.AddBinaryData("image", bytes, $"{tex.name}.png", "image/png");
using(var unityWebRequest = UnityWebRequest.Post("https://mywebsite.com", form))
{
unityWebRequest.SetRequestHeader("Authorization", "Token 555myToken555");
yield return unityWebRequest.SendWebRequest();
if (unityWebRequest.result != UnityWebRequest.Result.Success)
{
print($"Failed to upload {tex.name}: {unityWebRequest.result} - {unityWebRequest.error}");
}
else
{
print($"Finished Uploading {tex.name}");
}
}
}的性能也比Post()更好
https://stackoverflow.com/questions/67072328
复制相似问题