Unity本地服务器字符串上传失败求助:无法写入目标文件
问题分析与解决方案
核心问题
你的Web服务器默认不允许直接通过PUT请求修改文件,这就是为什么Unity返回上传成功,但服务器实际未写入数据;访问目录返回404是因为服务器未开启目录浏览或无默认索引页。直接用PUT上传的方案几乎不可行(除非修改服务器配置,且安全性极低),推荐用后端脚本(比如PHP)处理上传请求。
推荐方案:PHP脚本处理上传
1. 编写PHP处理脚本
在服务器的Project目录下创建save_data.php文件,内容如下:
<?php // 仅允许POST请求 if ($_SERVER['REQUEST_METHOD'] !== 'POST') { http_response_code(405); echo "Method Not Allowed"; exit; } // 获取Unity传递的字符串内容 $content = $_POST['content'] ?? ''; if (empty($content)) { http_response_code(400); echo "No content provided"; exit; } // 保存到123.txt,如需覆盖文件去掉FILE_APPEND参数 $savePath = '123.txt'; if (file_put_contents($savePath, $content, FILE_APPEND)) { http_response_code(200); echo "Data saved successfully"; } else { http_response_code(500); echo "Failed to save data"; } ?>
2. 修改Unity上传代码
替换原有的Upload协程,改为向PHP脚本发送POST请求:
IEnumerator Upload() { WWWForm form = new WWWForm(); // 对应PHP脚本中的"content"字段,可替换为JSON字符串 form.AddField("content", "This is some test data"); using (UnityWebRequest www = UnityWebRequest.Post("http://localhost/Project/save_data.php", form)) { yield return www.SendWebRequest(); if (www.result != UnityWebRequest.Result.Success) { Debug.Log(www.error); } else { ServerResult.text = www.downloadHandler.text; Debug.Log(www.downloadHandler.text); } } }
3. 配置服务器权限
确保Project目录具备写入权限:
- Linux/Apache:执行
chmod 755 /path/to/Project,生成的123.txt权限设为644 - Windows/IIS:给
IIS_IUSRS用户添加该目录的写入权限
可选:PUT方法配置(不推荐)
如果一定要用Unity的UnityWebRequest.Put,需修改服务器配置开启WebDAV,但此方式安全性极低,易被恶意篡改文件:
Apache
- 启用
mod_dav模块 - 在
httpd.conf或.htaccess中添加:
<Directory "/path/to/Project"> Dav On AllowOverride All Require all granted </Directory>
IIS
- 安装WebDAV组件
- 在站点配置中启用WebDAV并允许PUT请求
验证上传结果
上传完成后,可通过你的下载逻辑访问http://localhost/Project/123.txt,或新增文本下载协程:
IEnumerator DownloadText(string url, Action<string> OnError, Action<string> OnSuccess) { using (UnityWebRequest www = UnityWebRequest.Get(url)) { yield return www.SendWebRequest(); if (www.result != UnityWebRequest.Result.Success) { OnError(www.error); } else { OnSuccess(www.downloadHandler.text); } } }
内容的提问来源于stack exchange,提问作者aron kan
相关产品推荐
相关产品推荐

