从Oculus Quest上传到LAMP服务器时,上传的文件为0字节



我正在运行LAMP服务器来收集一些数据。我创建了一个Oculus Quest应用程序,它收集一些数据,然后将其发布到LAMP服务器。在Quest上部署之前测试POST方法的过程中,我使用了Unity和Windows。该方法运行良好,文件上传没有问题。

然而,当在Quest上部署它时,文件名会被上传并移动到目标目录,但文件都是0字节。

我已经研究了潜在的问题,并相应地修改了php.ini文件。我增加了输入时间、最大文件大小、最大文件号等。我还检查了权限和error.log文件。里面没有错误。

你们有什么想法吗?

Unity代码:file_n是一个数组。它读取任务中特定文件夹中的所有文件名。

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使用安卓系统。我通过更改这个来修复它:

fileToUpload = UnityWebRequest.Get(file_n);

到此:

fileToUpload = UnityWebRequest.Get("file:///" + file_n);

这个消息告诉android传递到UnityWebRequest.Get((的uri是一个文件目的地,而不是主机。在窗口上,没有必要将其放入,因此出现错误。感谢德雨果的帮助。

最新更新