目标是将unity场景数据直接保存在测试服务器某文件夹内,保存为json格式。
因为用IIS只部署了一个简单的服务器,使用UnityWebRequest上传文件方式不行,所以创建了ftp站点并用FtpWebRequest实现上传。
using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using UnityEngine; namespace UPLoadFTP { class UpLoadFiles { private static string FTPCONSTR = "ftp://XXX.XXX.XXX.XXX/";//FTP的服务器地址格式(ftp://192.168.1.234/)。ip地址和端口换成自己的,这些建议写在配置文件中,方便修改 private static string FTPUSERNAME = "Upload";//我的FTP服务器的用户名 private static string FTPPASSWORD = "1234";//我的FTP服务器的密码 /// <summary> /// 保存字符串内容到FTP /// </summary> /// <param name="ftpPath">存储上传文件的ftp路径</param> /// <param name="fileName">上传文件名称</param> /// <returns></returns> public static bool UploadFiles(string ftpPath, string fileName) { string str = "stringContest"; byte[] array = Encoding.UTF8.GetBytes(str); MemoryStream stream = new MemoryStream(array); string erroinfo = "";//错误信息
string path; path = FTPCONSTR + ftpPath + fileName; FtpWebRequest reqFtp = (FtpWebRequest)WebRequest.Create(new Uri(path)); reqFtp.UseBinary = true;//代表可以发送图片 reqFtp.Credentials = new NetworkCredential(FTPUSERNAME, FTPPASSWORD); reqFtp.KeepAlive = false;//在请求完成之后是否关闭到 FTP 服务器的控制连接 reqFtp.Method = WebRequestMethods.Ftp.UploadFile;//表示将文件上载到 FTP 服务器的 FTP STOR 协议方法 reqFtp.ContentLength = stream.Length;//本地上传文件的长度 int buffLength = 2048;//缓冲区大小 byte[] buff = new byte[buffLength];//缓冲区 int contentLen;//存放读取文件的二进制流 try { Stream strm = reqFtp.GetRequestStream();//将FtpWebRequest转换成stream类型 contentLen = stream.Read(buff, 0, buffLength);//存放读取文件的二进制流 //进度条 while (contentLen != 0) { strm.Write(buff, 0, contentLen); contentLen = stream.Read(buff, 0, buffLength); } //释放资源 stream.Close(); strm.Close(); erroinfo = "完成"; return true; } catch (Exception ex) { erroinfo = string.Format("无法完成上传" + ex.Message); Debug.Log(erroinfo); return false; } } } }
调用:UpLoadFiles.UploadFiles("/config/", "test5.json"); config为FTP站点下文件夹名字
引用链接:https://blog.csdn.net/qq_42345116/article/details/111190763