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