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