Unity3d上传图片到服务器,并实现微信扫码查看

avatar
作者
筋斗云
阅读量:0

1.先新建一个php文件,写入以下代码:并保存为 UnityUpload.php

<?php // 文件上传目录 注意各个服务器文件路径,此处示例为windows Server $target_dir = "C:\\XXX\\XXXX";  // 检查上传目录是否存在,如果不存在则创建 if (!file_exists($target_dir)) {     mkdir($target_dir, 0777, true); }  // 检查是否有文件上传 if (isset($_FILES['post']) && isset($_POST['Name'])) {     // 获取提交的文件名     $submitted_name = basename($_POST['Name']);          // 获取文件扩展名     $imageFileType = strtolower(pathinfo($_FILES['post']['name'], PATHINFO_EXTENSION));          // 目标文件路径     $target_file = $target_dir . $submitted_name . '.' . $imageFileType;      // 检查文件类型(可选)     $check = getimagesize($_FILES['post']['tmp_name']);     if ($check === false) {         die("File is not an image.");     }      // 限制文件类型(可选)     $allowed_types = array('jpg', 'png', 'jpeg', 'gif');     if (!in_array($imageFileType, $allowed_types)) {         die("Sorry, only JPG, JPEG, PNG & GIF files are allowed.");     }      // 移动上传的文件到目标文件夹     if (move_uploaded_file($_FILES['post']['tmp_name'], $target_file)) {         echo "The file " . htmlspecialchars($submitted_name) . " has been uploaded.";     } else {         echo "Sorry, there was an error uploading your file.";     } } else {     echo "No file uploaded or missing file name."; } ?>

2.下载一个php集成环境phpStudy(小皮面板(phpstudy) - 让天下没有难配的服务器环境!)

3.下载完毕,进行安装,默认安装就可以,可按照需求设置安装路径。

4.安装完毕后打开安装路径下目录WWW,例如:C:\phpstudy_pro\WWW。

5.在WWW目录下新建Upload文件夹,并将刚刚写的UnityUpload.php文件放入Upload文件夹中。

6.打开刚刚安装好的小皮面板,选择首页-》Apache-》配置

7.打开配置,网站目录选择到C:\XXX\WWW\UpLoad

:此处端口默认为80,根据我项目需求我改的82,可根据自己项目需求更改。

8.配置完后启动服务器

9.Unity3d新建工程,并新建脚本UploadImage.cs

using UnityEngine; using UnityEngine.Networking; using System.Collections; using System.IO; using System;  public class UploadImage : MonoBehaviour {     // PHP脚本URL,注意:因为我服务器的端口为82,所以此处也是82     public string uploadURL = "http://127.0.0.1:82/UpLoad/UnityUpload.php";      public string imagePath = "path_to_your_image"; // 图片的本地路径      void Start()     {         imagePath = Application.streamingAssetsPath + "/" + "1690191507485.jpeg";         StartCoroutine(UploadFile(imagePath));     }      IEnumerator UploadFile(string path)     {         // 读取文件数据         byte[] fileData = File.ReadAllBytes(path);         string fileExtension = Path.GetExtension(path).ToLower();          // 根据文件扩展名设置MIME类型         string mimeType = "";         switch (fileExtension)         {             case ".jpg":             case ".jpeg":                 mimeType = "image/jpeg";                 break;             case ".png":                 mimeType = "image/png";                 break;             case ".gif":                 mimeType = "image/gif";                 break;             default:                 Debug.LogError("Unsupported file type: " + fileExtension);                 yield break;         }          // 创建WWWForm表单         WWWForm form = new WWWForm();         //图片命名         string fileName = (DateTime.Now.Ticks / 10000000).ToString();         form.AddField("Name", fileName);         form.AddBinaryData("post", fileData, fileName + fileExtension, mimeType);          // 发送请求         using (UnityWebRequest www = UnityWebRequest.Post(uploadURL, form))         {             yield return www.SendWebRequest();              if (www.result != UnityWebRequest.Result.Success)             {                 Debug.LogError("Error uploading file: " + www.error);             }             else             {                 Debug.Log("File uploaded successfully: " + www.downloadHandler.text);             }         }     } } 

10.此时图片就可以上传到服务器,如果失败(a.看看服务器公网IP是否正确;b.此处端口在服务器是否开放等)

-------------------------------------------------------------------------------------------------------------------------------

11.因为要实现微信扫码功能,服务器就需要配置域名以及SSL证书,才可以在微信扫码显示

12.打开备案好的域名,再次下面配置服务器解析:如下,各个服务器都有提示,按照提示配置就可以;

13.去服务器处申请免费的SSL证书,因为是php,直接下载Apache就行

14.下载后得到以下文件:

root_bundle.crt 证书文件

cloud.tencent.com.crt 证书文件

cloud.tencent.com.key 私钥文件

cloud.tencent.com.csr CSR 文件

说明

CSR 文件是申请证书时由您上传或系统在线生成的,提供给 CA 机构。安装时可忽略该文件。

15.找到apache文件夹,打开conf文件夹,新建ssl文件夹,将文件root_bundle.crt,xxx.crt,xxx.key复制到ssl文件夹中;

16.打开 Apache 服务器 conf 目录下 httpd.conf 文件,并删除以下字段前 # 注释符。

#LoadModule ssl_module modules/mod_ssl.so #Include conf/extra/httpd-ssl.conf

删除后:

17.打开 Apache 服务器 conf\extra 目录下 httpd-ssl.conf 文件。配置一下三个文件:

SSLCertificateFile "conf/ssl/xxx.com.com.crt" SSLCertificateKeyFile "conf/ssl/xxx.com.com.key" SSLCertificateChainFile "${SRVROOT}/conf/ssl/root_bundle.crt"

18.重启服务器,浏览器输入域名:https://xxx.xxx.com 浏览器就可以看到安全锁标志

-------------------------------------------------------------------------------------------------------------------------

19.生成二维码,找到Unity生成二维码插件zxing.unity.dll,博客上很多,大家可以下载(或者百度云:通过网盘分享的文件:zxing.unity.dll
链接: https://pan.baidu.com/s/1_lfxEIEha1Xe7IM7ZRFLDw?pwd=ey2w 提取码: ey2w 20.)

20.上传图片后会在服务器上有文件,大家可以根据自己的域名进行拼接;例如:

"https://xxx.xxx.com/xxx/XXXX/" + name + ".png";

21.将链接生成二维码代码如下:

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using ZXing; using ZXing.QrCode;  /// <summary> /// 创建二维码 /// </summary> public class CreatQR : MonoBehaviour {     public static CreatQR Instance = null;     //存放二维码的纹理图片     Texture2D encoded;      [Header("在屏幕上显示二维码 ")]     public RawImage rawImg;      private void Awake()     {         Instance = this;     }      void Start()     {         /*初始化纹理图片          * 注意:宽高度大小必须是256,          * 否则出现索引超出数组边界错误          */         encoded = new Texture2D(256, 256);         rawImg.color = new Color(1, 1, 1, 0);         //CreatQr(); //创建生成二维码     }      #region 生成二维码      /// <summary>       /// 创建二维码     /// </summary>       public void CreatQr(string QrCodeStr)     {         if (QrCodeStr != string.Empty)         {             //二维码写入图片                 var color32 = Encode(QrCodeStr, encoded.width, encoded.height);             encoded.SetPixels32(color32); //更改纹理的像素颜色             encoded.Apply();             //生成的二维码图片附给RawImage                 rawImg.texture = encoded;         }         else             Debug.Log("没有生成信息");     }      /// <summary>     /// 生成二维码      /// </summary>     /// <param name="textForEncoding">需要生产二维码的字符串</param>     /// <param name="width">宽</param>     /// <param name="height">高</param>     /// <returns></returns>            private Color32[] Encode(string formatStr, int width, int height)     {          //绘制二维码前进行一些设置         QrCodeEncodingOptions options = new QrCodeEncodingOptions();          //设置字符串转换格式,确保字符串信息保持正确         options.CharacterSet = "UTF-8";          //设置绘制区域的宽度和高度的像素值         options.Width = width;         options.Height = height;          //设置二维码边缘留白宽度(值越大留白宽度大,二维码就减小)         options.Margin = 1;          /*实例化字符串绘制二维码工具          * BarcodeFormat:条形码格式          * Options: 编码格式(支持的编码格式)          */         var barcodeWriter = new BarcodeWriter { Format = BarcodeFormat.QR_CODE, Options = options };         rawImg.color = new Color(1, 1, 1, 1);         //进行二维码绘制并进行返回图片的颜色数组信息         return barcodeWriter.Write(formatStr);     }     #endregion } 

22.此时就可实现微信扫码;

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!