首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用UnityWebRequest.Post()将多个文件上传到服务器;

如何使用UnityWebRequest.Post()将多个文件上传到服务器;
EN

Stack Overflow用户
提问于 2019-05-16 02:28:23
回答 1查看 2.9K关注 0票数 1

我正在尝试使用UnityWebRequest.Post()上传多个文件,以下是我的代码。

 public void UploadFiles()
 {
     string[] path = new string[3];
     path[0] = "D:/File1.txt";
     path[1] = "D:/File2.txt";
     path[2] = "D:/File3.txt";

     UnityWebRequest[] files = new UnityWebRequest[3];
     WWWForm form = new WWWForm();

     for (int i = 0; i < files.Length; i++)
     {
         files[i] = UnityWebRequest.Get(path[i]);
         form.AddBinaryData("files[]", files[i].downloadHandler.data, Path.GetFileName(path[i]));
     }

     UnityWebRequest req = UnityWebRequest.Post("http://localhost/File%20Upload/Uploader.php", form);
     yield return req.SendWebRequest();

     if (req.isHttpError || req.isNetworkError)
         Debug.Log(req.error);
     else
         Debug.Log("Uploaded " + files.Length + " files Successfully");
 }

但是,这些文件是在目标位置创建的,大小为0字节。

这是我的Uploader.php代码

 <$php
   $total = count($_FILES['files']['name']);
   $uploadError = false;
   for ( $i = 0; $i < $total; $i++)
   {
     $tmpFilePath = $_FILES['files']['tmp_name'][$i];

     if ($tmpFilePath != "")
     {
         $newFilePath = "Uploads/".$_FILES['files']['name'][$i];
         if (!move_uploaded_file($tmpFilePath, $newFilePath))
             $uploadError = true;
     }
   }
   if ($uploadError)
       echo "Upload Error";
   else
       echo "Uploaded Successfully";
 ?>

我使用了这个HTML示例作为参考。而在浏览器中,HTML代码可以完美地工作。Unity中存在问题。

 <form enctype="multipart/form-data" action="Uploader.php" method="POST">
     Choose a file to Upload:
     <input type="file" name="files[]" multiple="multiple" /><br>
     <input type="submit" value="Upload File" />
 </form>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-16 03:08:34

for loop中,在C#代码中,在请求文件之后,我们必须在获取文件时让步。所以在请求文件后使用yield return files[i].SendWebRequest();就可以解决这个问题。修改后的代码如下:

IEnumerator UploadMultipleFiles()
{
    string[] path = new string[3];
    path[0] = "D:/File1.txt";
    path[1] = "D:/File2.txt";
    path[2] = "D:/File3.txt";

    UnityWebRequest[] files = new UnityWebRequest[path.Length];
    WWWForm form = new WWWForm();

    for (int i = 0; i < files.Length; i++)
    {
        files[i] = UnityWebRequest.Get(path[i]);
        yield return files[i].SendWebRequest();
        form.AddBinaryData("files[]", files[i].downloadHandler.data, Path.GetFileName(path[i]));
    }

    UnityWebRequest req = UnityWebRequest.Post("http://localhost/File%20Upload/Uploader.php", form);
    yield return req.SendWebRequest();

    if (req.isHttpError || req.isNetworkError)
        Debug.Log(req.error);
    else
        Debug.Log("Uploaded " + files.Length + " files Successfully");
}

代码的其余部分就可以了。PHP代码没有变化。HTML代码仅供参考。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56155603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档