Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在尝试将.png文件上载到web目录_C#_Php_Unity3d_File Upload - Fatal编程技术网

C# 正在尝试将.png文件上载到web目录

C# 正在尝试将.png文件上载到web目录,c#,php,unity3d,file-upload,C#,Php,Unity3d,File Upload,我正在尝试使用Unity将.png文件上载到特定的web文件夹。问题可能是三件事之一 1) 我在godaddy上找不到php.ini文件。那么可能是文件夹未配置为上载 2) 我以前从未在Unity中这样做过,所以我的代码可能会有问题。(它确实返回消息说我的文件无法上传,因此它正在ping.php文件) 3) 它也可能是我的php代码,不确定我是否正确地改编了这个示例 我读过其他的例子,但我只是不确定我的问题在哪里,我应该修复什么。任何建议都会很棒 团结: public IEnumerator U

我正在尝试使用Unity将.png文件上载到特定的web文件夹。问题可能是三件事之一

1) 我在godaddy上找不到php.ini文件。那么可能是文件夹未配置为上载

2) 我以前从未在Unity中这样做过,所以我的代码可能会有问题。(它确实返回消息说我的文件无法上传,因此它正在ping.php文件)

3) 它也可能是我的php代码,不确定我是否正确地改编了这个示例

我读过其他的例子,但我只是不确定我的问题在哪里,我应该修复什么。任何建议都会很棒

团结:

public IEnumerator UploadTicketImage()
{
    byte[] FileUpload = File.ReadAllBytes(Path.Combine(Application.persistentDataPath 
        + "/TicketInformation/", "Pic001.png"));

    WWWForm TextureForm = new WWWForm();
    //TextureForm.AddBinaryData(PlayerPrefs.GetString("ImageName"), FileUpload);
    TextureForm.AddBinaryData("TotalTest", FileUpload, Path.Combine(Application.persistentDataPath 
        + "/TicketInformation/", "Pic001.png"),"image/png");

    UnityWebRequest wwwimageupload = UnityWebRequest.Post(StaticVars.IPAddress+ "/UploadTicketsImage.php?", TextureForm);

    wwwimageupload.uploadHandler = (UploadHandler)new UploadHandlerRaw(FileUpload);
    //wwwimageupload.chunkedTransfer = false;

    yield return wwwimageupload.SendWebRequest();
    Debug.Log(wwwimageupload.downloadHandler.text);
}
PHP


我已经希望它找不到您要正确上传的图像文件

Path.Combine(Application.persistentDataPath + "/TicketInformation/", "Pic001.png")
结果是一个类似于

                   |                 |
                   v                 v

C:\path\to\project\/TicketInformation/\Pic001.png
在窗户上或

                 |                  |
                 v                  v

/path/to/project//TicketInformation//Pic001.png
在linux或android上

它应该像这样使用

Path.Combine(Application.persistentDataPath, "TicketInformation", "Pic001.png")


下一点是:当您已经将数据添加到
WWWForm
时,为什么还要使用
UploadHandlerRaw
,所以这对我来说似乎没有多大意义

你应该拆下这条线

wwwimageupload.uploadHandler = (UploadHandler)new UploadHandlerRaw(FileUpload);

还要注意的是,这只适用于Windows平台,因此根据构建目标,您可能必须更改读取文件的方式。您还可以使用一个文件管理器来读取本地文件。差不多

public IEnumerator UploadTicketImage()
{
    var folderPath = Path.Combine(Application.persistentDataPath, "TicketInformation");
    var filepath = Path.Combine(folderPath, "Pic001.png");

    byte[] FileUpload = null;

    using (var www = UnityWebRequestTexture.GetTexture(filepath))
    {
        yield return www.SendWebRequest();
        if (www.isNetworkError || www.isHttpError)
        {
            Debug.LogErrorFormat(this, "File loading failed with {0} - {1}", www.responseCode, www.error);
            Debug.LogErrorFormat(this, "Couldn't read file at {0}", filepath);
            yield break;
        }
        else
        {
            // file data successfully loaded
            FileUpload = www.downloadHandler.data;
        }
    }

    var form = new WWWForm();
    // here you want the name the file should have on the server
    // not a complete system path to file on your local device
    //                                          |
    //                                          |
    //                                          |
    // And this is the field you will have      |
    // to access in php                         |
    //                  |                       |
    //                  v                       v
    form.AddBinaryData("TotalTest", FileUpload, "Pic001.png", "image/png");

    using (var www = UnityWebRequest.Post("https://111.111.111.1" + "/UploadTicketsImage.php?", form))
    {
        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError)
        {
            Debug.LogError(www.error);
        }
        else
        {
            Debug.Log(www.downloadHandler.text);
        }
    }
}

最后,我不是afaik的PHP专家,您必须访问提交的字段,如

$_FILES['TotalTest']
form.AddBinaryData
中调用字段
TotalTest

还有

if(isset($_POST["submit"]))
可能永远不会是真的,因为您没有在
WWWForm
中设置它(我可能错了,每当发送请求时都会自动设置它)



注意:在智能手机上输入,因此不提供保修,但我希望这一想法变得清晰。

在尝试查找3个可能的问题源之前。。你能确切地说明什么不起作用吗?你的文件读取工作正常吗?您的请求是否有效(到达服务器)?在
Debug.Log
之前,我会添加
if(wwwimageupload.ishttperor | | | wwwimageupload.isNetworkError)Debug.LogErrorFormat(这是“无法上传!失败,错误为{0}-{1}”,wwwimageupload.responseCode,wwimageupload.error);}else
在尝试了您和其他海报的建议后,我会在稍后发布更多信息。谢谢你的回复。我只是坐下来讨论一下你的建议。谢谢你的帮助。我将在完成所有工作后发回。我调试记录了持久数据路径,它读取正确,没有任何重复的斜杠。我可能错了,但我认为unity在其他命令中使用文本中的反斜杠,在字符串中使用反斜杠。我知道我从我的windows文件夹中提取了这张图片,以便在应用程序中进行测试,但我还没有在手机上这样做。至于您所使用的PHP,我还必须在其他$\u文件中将文本更改为“TotalTest”,这很有效。给我一个你喜欢的酒吧的名字,我看看能不能给你买一个。非常感谢您的帮助。另外,您是否可以编辑关于将所有文件中的名称替换为total test的部分?我将把它作为答案,但最好确保其他人不会错过这一部分。
$_FILES['TotalTest']
if(isset($_POST["submit"]))