6.上传AB包和资源对比文件

6.上传相关-上传AB包和信息文件-上传AB包和资源对比文件


6.1 知识点

上传AB包和资源对比文件需求分析

  • 在菜单栏添加一个按钮,用于触发该功能
  • 遍历AB包文件夹,获取所有AB包文件和资源对比文件信息
  • 将这些文件上传到FTP服务器中

创建上传AB包和对比文件的UploadAB类放在Editor文件夹下,定义FTP上传函数

public class UploadAB
{
    private async static void FtpUploadFile(string filePath, string fileName)
    {
        await Task.Run(() =>
        {
            try
            {
                // 创建一个FTP连接 用于上传
                FtpWebRequest ftpWebRequest = FtpWebRequest.Create(new Uri("ftp://127.0.0.1/AB/PC/" + fileName)) as FtpWebRequest;

                // 设置一个通信凭证 这样才能上传
                NetworkCredential networkCredential = new NetworkCredential("MrTao", "MrTao");
                ftpWebRequest.Credentials = networkCredential;

                // 其它设置
                //  设置代理为null
                ftpWebRequest.Proxy = null;
                //  请求完毕后 是否关闭控制连接
                ftpWebRequest.KeepAlive = false;
                //  操作命令-上传
                ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
                //  指定传输的类型 2进制
                ftpWebRequest.UseBinary = true;

                // 上传文件
                //  ftp的流对象
                Stream upLoadStream = ftpWebRequest.GetRequestStream();
                //  读取文件信息 写入该流对象
                using (FileStream fileStream = File.OpenRead(filePath))
                {
                    //一点一点的上传内容
                    byte[] bytes = new byte[2048];

                    //读文件信息 返回值 代表读取了多少个字节
                    int contentLength = fileStream.Read(bytes, 0, bytes.Length);

                    //循环上传文件中的数据
                    while (contentLength != 0)
                    {
                        //写入到上传流中
                        upLoadStream.Write(bytes, 0, contentLength);
                        //写完再读
                        contentLength = fileStream.Read(bytes, 0, bytes.Length);
                    }

                    //循环完毕后 证明上传结束
                    fileStream.Close();
                    upLoadStream.Close();
                }

                Debug.Log(fileName + "上传成功");
            }
            catch (Exception ex)
            {
                Debug.Log(fileName + "上传失败" + ex.Message);
            }
        });
    }
}

UploadAB定义一个有菜单栏点击特性的上传AB包和资源对比文件的函数。得到AB包文件夹下的所有AB包和对比文件,进行FTP上传。

[MenuItem("AB包工具/上传AB包和对比文件")]
private static void UploadAllABFile()
{
    //获取文件夹信息
    DirectoryInfo directory = Directory.CreateDirectory(Application.dataPath + "/ArtRes/AB/PC/");
    //获取该目录下的所有文件信息
    FileInfo[] fileInfos = directory.GetFiles();

    foreach (FileInfo info in fileInfos)
    {
        //没有后缀的 才是AB包 我们只想要AB包的信息
        //还有需要获取 资源对比文件 格式是txt(该文件夹中 只有对比文件的格式才是txt 所以可以这样判断)
        if (info.Extension == "" ||
            info.Extension == ".txt")
        {
            //上传该文件
            UploadAB.FtpUploadFile(info.FullName, info.Name);
        }
    }
}

进行上传测试,注意服务器路径上要有AB/PC这两个文件夹,没有要手动创建,不然上传时不会自动创建会找不到


6.2 知识点代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;

public class UploadAB
{
    [MenuItem("AB包工具/上传AB包和对比文件")]
    private static void UploadAllABFile()
    {
        //获取文件夹信息
        DirectoryInfo directory = Directory.CreateDirectory(Application.dataPath + "/ArtRes/AB/PC/");
        //获取该目录下的所有文件信息
        FileInfo[] fileInfos = directory.GetFiles();

        foreach (FileInfo info in fileInfos)
        {
            //没有后缀的 才是AB包 我们只想要AB包的信息
            //还有需要获取 资源对比文件 格式是txt(该文件夹中 只有对比文件的格式才是txt 所以可以这样判断)
            if (info.Extension == "" ||
                info.Extension == ".txt")
            {
                //上传该文件
                FtpUploadFile(info.FullName, info.Name);
            }
        }
    }

    private async static void FtpUploadFile(string filePath, string fileName)
    {
        await Task.Run(() =>
        {
            try
            {
                //1.创建一个FTP连接 用于上传
                FtpWebRequest ftpWebRequest = FtpWebRequest.Create(new Uri("ftp://127.0.0.1/AB/PC/" + fileName)) as FtpWebRequest;

                //2.设置一个通信凭证 这样才能上传
                NetworkCredential networkCredential = new NetworkCredential("MrTao", "MrTao");
                ftpWebRequest.Credentials = networkCredential;

                //3.其它设置
                //  设置代理为null
                ftpWebRequest.Proxy = null;
                //  请求完毕后 是否关闭控制连接
                ftpWebRequest.KeepAlive = false;
                //  操作命令-上传
                ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
                //  指定传输的类型 2进制
                ftpWebRequest.UseBinary = true;

                //4.上传文件
                //  ftp的流对象
                Stream upLoadStream = ftpWebRequest.GetRequestStream();
                //  读取文件信息 写入该流对象
                using (FileStream fileStream = File.OpenRead(filePath))
                {
                    //一点一点的上传内容
                    byte[] bytes = new byte[2048];

                    //读文件信息 返回值 代表读取了多少个字节
                    int contentLength = fileStream.Read(bytes, 0, bytes.Length);

                    //循环上传文件中的数据
                    while (contentLength != 0)
                    {
                        //写入到上传流中
                        upLoadStream.Write(bytes, 0, contentLength);
                        //写完再读
                        contentLength = fileStream.Read(bytes, 0, bytes.Length);
                    }

                    //循环完毕后 证明上传结束
                    fileStream.Close();
                    upLoadStream.Close();
                }

                Debug.Log(fileName + "上传成功");
            }
            catch (Exception ex)
            {
                Debug.Log(fileName + "上传失败" + ex.Message);
            }
        });
       
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏