之前测试功能写过一次,因为代码忘记保存,导致真正用到的时候怎么也想不起来当初怎么写的了,复现后还是写个文章记录一下,省的下次再忘记。文章来源:https://www.toymoban.com/news/detail-818950.html
php后端
/**
* 图片保存到本地
*/
public function uploadLocalImage()
{
try {
$img = $this->_request->file('img');
if (empty($img)) {
throw new \Exception('缺少图片参数');
}
$writeDir = "images/".date('Ymd');
$dir = "D:/phpstudy_pro/WWW/vkm_locarun_dist/dist/".$writeDir;
//$dir = "local_run/" . date('Ymd'); //linux调试地址
if (!file_exists($dir)) {
mkdir($dir, 0777, true);
}
$extension = substr($img->getMimeType(), -3);
if ($extension == 'bmp') {
$fileName = UtilService::createOrderNo() . '.bmp';
}if ($extension == 'png') {
$fileName = UtilService::createOrderNo() . '.png';
}else{
$fileName = UtilService::createOrderNo() . '.jpg';
}
$imgContent = file_get_contents($img);
file_put_contents($dir . '/' . $fileName, $imgContent);
$localhostImg = env('CLIENT_URL') . $writeDir . '/' . $fileName;
//http://127.0.0.1:8000/xxx/20231016/xxx.jpg 读取方式
$this->returnSuccess($localhostImg);
} catch (\Exception $e) {
$this->returnFault($e->getMessage());
}
}
Unity C#
/// <summary>
/// 上传文件到服务器
/// </summary>
/// <param name="filePaths">文件路径</param>
void UploadToLocalServer(string[] filePaths)
{
int count = filePaths.Length;
urls = new string[count];
isUploaded = new bool[count];
string filePath;
//文件命为上传OSS时的key
for (int i = 0; i < count; i++)
{
int current = i;
filePath = filePaths[current];
if (File.Exists(filePath))
{
File.SetAttributes(filePath, FileAttributes.Normal);
StartCoroutine(UploadToLocal(filePath, current));
}
else
{
urls[current] = "none";
}
}
}
IEnumerator UploadToLocal(string filePath, int index)
{
byte[] fileByte = File.ReadAllBytes(filePath);
WWWForm form = new WWWForm();
//根据自己上传的文件修改格式,img是接口请求json参数的key,
//最后一个参数是图片的mimeType, 因为上传的图片有jpg、png、bmp几种格式,此处取文件后缀和image组合字符串作为mimeType
form.AddBinaryData("img", fileByte, Path.GetFileName(filePath), $"image/{Path.GetExtension(filePath)}");
Helper.Log($"{Config.SystemConfig.sendHost}/uploadLocalImage");
using (UnityWebRequest www = UnityWebRequest.Post($"{Config.SystemConfig.sendHost}/uploadLocalImage", form))
{
yield return www.SendWebRequest();
if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError)
{
urls[index] = "error";
Helper.LogError($"[ERROR] {filePath}, msg: {www.error}");
}
else
{
string text = www.downloadHandler.text;
//Helper.Log("服务器返回值" + text);
JObject json = JObject.Parse(text);
if (json["msg"].ToString().Equals("success"))
{
urls[index] = json["data"].ToString();
Helper.Log($"[SUCCESS] {urls[index]}");
}
else
{
urls[index] = "error";
Helper.LogError($"[ERROR] {filePath}, msg: {text}");
}
isUploaded[index] = true;
}
}
}
搞定。文章来源地址https://www.toymoban.com/news/detail-818950.html
到了这里,关于Unity UnityWebRequest 向php后端上传图片文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!