Php 从Oculus Quest上载到LAMP服务器时,上载的文件为0字节
我正在运行LAMP服务器来收集一些数据。我创建了一个Oculus Quest应用程序,它收集一些数据,然后将其发布到LAMP服务器。在部署到Quest之前测试POST方法时,我使用的是Unity和Windows。该方法工作正常,文件上传没有问题 但是,在任务上部署时,文件名会上载并移动到目标目录,但文件都是0字节 我已经研究了潜在的问题,并相应地修改了php.ini文件。我增加了输入时间、最大文件大小、最大文件号等。我还检查了权限和error.log文件。里面没有错误 你们有什么想法吗 统一代码:文件是一个数组。它读取任务中特定文件夹中的所有文件名Php 从Oculus Quest上载到LAMP服务器时,上载的文件为0字节,php,unity3d,server,upload,quest,Php,Unity3d,Server,Upload,Quest,我正在运行LAMP服务器来收集一些数据。我创建了一个Oculus Quest应用程序,它收集一些数据,然后将其发布到LAMP服务器。在部署到Quest之前测试POST方法时,我使用的是Unity和Windows。该方法工作正常,文件上传没有问题 但是,在任务上部署时,文件名会上载并移动到目标目录,但文件都是0字节 我已经研究了潜在的问题,并相应地修改了php.ini文件。我增加了输入时间、最大文件大小、最大文件号等。我还检查了权限和error.log文件。里面没有错误 你们有什么想法吗 统一代码
IEnumerator UploadFile(string subID)
{
UnityWebRequest fileToUpload = new UnityWebRequest();
WWWForm form = new WWWForm();
fileToUpload = UnityWebRequest.Get(file_n);
yield return fileToUpload.SendWebRequest();
form.AddField("sub_ID", subID);
form.AddBinaryData("files[]", fileToUpload.downloadHandler.data, Path.GetFileName(file_n));
UnityWebRequest req = UnityWebRequest.Post(hostName, form);
yield return req.SendWebRequest();
if (req.isHttpError || req.isNetworkError)
{
Debug.Log(req.error);
}
else
{
Debug.Log(req.downloadHandler.text);
result = req.downloadHandler.text;
debugText.text = result;
}
}
PHP代码:
<?php
// Include the database configuration file
include_once 'configFile.php';
// File upload configuration
$targetDir = "targetDirectory/";
$allowTypes = array('txt');
// variables submitted by user
$subID = $_POST["sub_ID"];
$statusMsg = $errorMsg = $insertValuesSQL = $errorUpload = $errorUploadType = '';
$fileNames = array_filter($_FILES['files']['name']);
if(!empty($fileNames)){
foreach($_FILES['files']['name'] as $key=>$val){
// File upload path
$fileName = basename($_FILES['files']['name'][$key]);
$targetFilePath = $targetDir . $fileName;
// Check whether file type is valid
$fileType = pathinfo($targetFilePath, PATHINFO_EXTENSION);
if(in_array($fileType, $allowTypes)){
if(move_uploaded_file($_FILES["files"]["tmp_name"][$key], $targetFilePath)){
$insertValuesSQL .= "('" .$subID. "', '".$fileName."', NOW()),";
}else{
$errorUpload .= $_FILES['files']['name'][$key].' | ';
}
}else{
$errorUploadType .= $_FILES['files']['name'][$key].' | ';
}
}
if(!empty($insertValuesSQL)){
$insertValuesSQL = trim($insertValuesSQL, ',');
$insert = $conn->query("INSERT INTO thisTable (sub_ID, file_name, uploaded_on) VALUES $insertValuesSQL");
if($insert){
$errorUpload = !empty($errorUpload)?'Upload Error: '.trim($errorUpload, ' | '):'';
$errorUploadType = !empty($errorUploadType)?'File Type Error: '.trim($errorUploadType, ' | '):'';
$errorMsg = !empty($errorUpload)?'<br/>'.$errorUpload.'<br/>'.$errorUploadType:'<br/>'.$errorUploadType;
$statusMsg = "Files are uploaded successfully.".$errorMsg;
}else{
$statusMsg = "Sorry, there was an error uploading your file.";
}
}
}else{
$statusMsg = 'Please select a file to upload.';
}
// Display status message
echo $statusMsg;
?>
Quest使用Android系统。我通过更改以下内容来修复它:
fileToUpload = UnityWebRequest.Get(file_n);
为此:
fileToUpload = UnityWebRequest.Get("file:///" + file_n);
这告诉android,传入UnityWebRequest.Get()的uri是一个文件目标,而不是主机。在windows上,没有必要将其放入,因此会出现错误。感谢derHugo的帮助。只是一个旁注,但这是用于
UnityWebRequest文件toupload=new UnityWebRequest()代码>?@derHugo现在想起来似乎是多余的——当我收到一个没有它的错误时,我使用了它。新来的!我不是PHP专家,但也是这方面的$fileNames=array_filter($\u FILES['FILES']['name'])代码>看起来有点多余。。我还将在yield return fileToUpload.SendWebRequest()之后检查是否有任何错误代码>。。也许本地找不到文件?或者发生任何其他错误,因此您实际上正在上载0个字节?由于每个文件名都已正确加载并发布到数据库,因此文件似乎已被找到。他们只是没有数据。太令人困惑了!您上传的文件名就是您传递到文件中的任何文件名。。并不意味着该文件存在。。。如果不是,则fileToUpload
请求可能只是有一个错误,downloadHandler.data
一个空数组。。。最好添加if(fileToUpload.ishttperor | | fileToUpload.isNetworkError){Debug.LogError(req.error);yield break;}