通过UnityWebRequest发送图像



我正试图通过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中,您可以使用例如WWWFormAddFieldAddBinaryData(如(轻松添加表单部件

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((好

它们是完全不同的协议。

最新更新