Unity上传图片到服务器指定的文件夹中

程序需要用到一个拍照保存到云端的功能,数据可以保存到数据库和服务器,首先不建议保存到数据库,原因就是太慢了,所以就选择了保存到服务器。

一、Unity端:

1、获取图片的数据,一般传送图片的时候都会先把图片转换成二进制数据。

2、使用WWWForm类创建表单。

3、最后使用WWW类上传到服务器即可。

using System.Collections;
using UnityEngine;

public class TestWWW : MonoBehaviour
{
    public Sprite imgae;
    string url = "http://。。。。/Upload.php";
    string CreateURL = "http://。。。。/CreatFolder.php";
    string DelURL = "http://。。。。/DelFolder.php";

    void Start()
    {
        StartCoroutine(CreatFolder("Photos"));//在服务器上创建文件夹
        //StartCoroutine(DelFolder("Photos"));//在服务器上删除文件夹
        //StartCoroutine(Upload());//上传图片到服务器指定的文件夹
    }

    //创建文件夹
    IEnumerator CreatFolder(string FolderName)
    {
        WWWForm wForm = new WWWForm();
        wForm.AddField("FolderName", FolderName);
        WWW w = new WWW(CreateURL, wForm);
        yield return w;
        if (w.isDone)
        {
            Debug.Log("创建文件夹完成");
        }
    }

    //删除文件夹
    IEnumerator DelFolder(string FolderName)
    {
        WWWForm wForm = new WWWForm();
        wForm.AddField("FolderName", FolderName);
        WWW w = new WWW(DelURL, wForm);
        yield return w;
        if (w.isDone)
        {
            Debug.Log("删除文件夹完成");
        }
    }

    //上传图片到指定的文件夹
    IEnumerator Upload()
    {
        byte[] bytes = SpriteToBytes(imgae);//获取图片数据
        WWWForm form = new WWWForm();//创建提交数据表单
        form.AddField("folder", "Photos/");//定义表单字段用来定义文件夹
        form.AddBinaryData("file", bytes, "11.png", "image/png");//字段名,文件数据,文件名,文件类型
        WWW w = new WWW(url, form);
        yield return w;
        if (w.isDone)
        {
            Debug.Log("上传完成");
        }
    }

    //获取图片的二进制数据
    public byte[] SpriteToBytes(Sprite sp)
    {
        Texture2D t = sp.texture;
        byte[] bytes = t.EncodeToJPG();
        return bytes;
    }
}

二、服务端PHP

1、创建文件夹

2、删除文件夹

在删除之前需要先遍历当前文件夹是否是根目录,若是根目录则先删除文件,最后删除文件夹,若是当前文件夹中还有文件夹则继续向深度遍历。

3、上传图片到指定文件夹中

在这里入了坑,因为文件夹的名字不能确定,开始的时候我连同文件夹和名字一起发送到服务端("Photos/hhh.png"),试了很多次都没有存进去,最后使用保存信息到文本,查看字符串信息。才发现服务器的$fileName =$_FILES["file"]["name"];这句话直接把斜杠前面的自动给我截掉了,都没有收到文件夹的完整信息,所以没有存进去,折腾了好久。

 

你可能感兴趣的:(unity,Unity)