【发布时间】:2020-11-12 09:06:08
【问题描述】:
我想让用户使用他机器上的本地图像并将其上传到服务器。
我所做的是在游戏中使用 UnityWebRequest,加载图像,将其发送到服务器上的 PHP 文件,然后等待回复以记住保存文件的 URL(稍后将其保存在 Playfab 中)。
这是我目前制作的代码:
private readonly string setAvatarUrl = "http://myurl.com/setavatar.php";
private readonly string playerIdField = "playfabid";
private readonly string imageField = "img_avatar";
public IEnumerator SaveImageToDB(Texture2D image)
{
byte[] bytes = image.EncodeToPNG();
WWWForm form = new WWWForm();
form.AddField(playerIdField, player.playerId);
form.AddBinaryData(imageField, bytes, "avatar.png", "image/png");
UnityWebRequest www = new UnityWebRequest();
www = UnityWebRequest.Post(setAvatarUrl, form);
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.LogError(www.error);
}
else
{
string jsonFromDB = www.downloadHandler.text; // Return empty string
string imageUrl = JsonUtility.FromJson<string>(jsonFromDB);
Debug.Log($"JSON returned: {jsonFromDB}");
if (!string.IsNullOrEmpty(imageUrl))
{
// Save the url
}
Debug.Log("Image upload complete!");
}
}
这是 PHP 文件:
<?php
ini_set('display_errors',1);
$idplayfab = $_POST['playfabid'];
$path = 'avatar/'.$idplayfab;
if(file_exists($path)) {
//dir exist
$files = glob($path.'/*');
foreach($files as $file){
if(is_file($file))
unlink($file);
}
} else {
//not exist
mkdir($path);
}
$uploadfile = $path ."/". basename($_FILES['img_avatar']['name']);
if (move_uploaded_file($_FILES['img_avatar']['tmp_name'], $uploadfile)) {
$array = array('result' => 'ok', 'url' => 'http://myurl.com/'.$uploadfile);
$json = json_encode($array);
return $json;
} else {
$array = array('result' => 'ko');
$json = json_encode($array);
return $json;
}
?>
图像保存在服务器上,但问题是当我尝试获取 JSON 以获取 URL 时,字符串为空,我不明白为什么。
我尝试了很多解决方案,例如 this one 或 this one,但我无法弄清楚。
我也尝试过使用已弃用的 WWW,但还是不行。
我对 PHP 有点陌生,所以我认为这可能是 PHP 部分的问题。
【问题讨论】:
-
我没有看到使用这种方式的 php 返回。我不希望您的 php 代码返回任何内容,而事实并非表明我是对的。
-
那么请指点我在哪里可以找到解决方案,好吗?我整整两天都在努力完成这项工作。
标签: c# php unity3d post unitywebrequest