我正试图通过Unity将图像发送到服务器。我可以通过以下代码通过命令提示符发送图像:
curl -H "Authorization: Token 555myToken555" -F "id=Image01" -F "image=@/home/example.png" https://mywebsite.com
但我无法用Unity的Web请求实现同样的目的。我在哪里提供";id=Image01";和http链接?Put((的性能比Post((好吗?
public Texture2D tex;
UnityWebRequest unityWebRequest= UnityWebRequest.Put( tex, texture.EncodeToPNG());
unityWebRequest.SetRequestHeader("Authorization", "Token 555myToken555");
unityWebRequest.SendWebRequest();
首先,UnityWebRequest.Put
的第一个参数不是tex
,其中ToString
隐式返回tex.name
,而是URI!
然后注意curl -F
(HTTP(这允许curl模拟用户按下提交按钮的已填充表单这导致curl根据RFC2388使用Content-Type multipart/form数据来POST数据。这使得能够上传二进制文件等
无论如何都使用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}");
}
}
}
Put((在性能上也比Post((好
它们是完全不同的协议。