【问题标题】:Get the link of the uploaded file with UnityWebRequest and php使用 UnityWebRequest 和 php 获取上传文件的链接
【发布时间】: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 onethis one,但我无法弄清楚。

我也尝试过使用已弃用的 WWW,但还是不行。

我对 PHP 有点陌生,所以我认为这可能是 PHP 部分的问题。

【问题讨论】:

  • 我没有看到使用这种方式的 php 返回。我不希望您的 php 代码返回任何内容,而事实并非表明我是对的。
  • 那么请指点我在哪里可以找到解决方案,好吗?我整整两天都在努力完成这项工作。

标签: c# php unity3d post unitywebrequest


【解决方案1】:

不是 PHP 专家,但:

Afaik return 仅用于评估某些功能,例如为了成功或为了在在服务器端响应客户端之前进一步处理某事的结果。

您想要做的是将您的内容作为 http 结果发送给客户端

=> 您应该使用echoprint 来生成http 输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    相关资源
    最近更新 更多