• c#操作可道云api帮助类


    代码:

          public class KodCloudHelper
    	{
    		static readonly string kodCloudUrl = Configs.GetString("KodCloudUrl");
    		static readonly string kodCloudUser = Configs.GetString("KodCloudUser");
    		static readonly string kodCloudPwd = Configs.GetString("KodCloudPwd");
    		private readonly HttpClient Client;//如果不是一个client实例 可道云需要多传一个accessToken参数
    
    		public KodCloudHelper()
    		{
    			Client = new HttpClient();
    		}
    		
    		/// <summary>
    		/// 获取accessToken
    		/// </summary>
    		/// <returns></returns>
    		public async Task<string> GetAccessToken()
    		{
    			var requestUrl = $"{kodCloudUrl}?user/loginSubmit&isAjax=1&getToken=1&name={kodCloudUser}&password={kodCloudPwd}";
    			return await GetKodApi(requestUrl);
    		}
    		/// <summary>
    		/// 获取文件列表
    		/// </summary>
    		/// <param name="path">文件夹路径</param>
    		/// <returns></returns>
    		public async Task<string> GetFileList(string path)
    		{
    
    			var requestUrl = $"{kodCloudUrl}?explorer/pathList&path={path}";
    			return await GetKodApi(requestUrl);
    		}
    		/// <summary>
    		/// 批量获取文件属性
    		/// </summary>
    		/// <param name="getFilesAttrModel"></param>
    		/// <returns></returns>
    		public async Task<string> GetFileAttr(List<GetFilesAttrModel> getFilesAttrModels)
    		{
    
    			var requestUrl = $"{kodCloudUrl}?explorer/pathInfo";
    			return await PostKodApi(requestUrl, new Dictionary<string, string>()
    				{
    					{"dataArr",  JsonConvert.SerializeObject(getFilesAttrModels)}
    				});
    		}
    		/// <summary>
    		/// 指定路径创建文件夹
    		/// </summary>
    		/// <param name="dirPath"></param>
    		/// <returns></returns>
    		public async Task<string> Mkdir(string dirPath)
    		{
    
    			var requestUrl = $"{kodCloudUrl}?explorer/mkdir";
    			return await PostKodApi(requestUrl, new Dictionary<string, string>()
    				{
    					{"path",  dirPath}
    				});
    		}
    		/// <summary>
    		/// 重命名文件或文件夹
    		/// </summary>
    		/// <param name="dirPath"></param>
    		/// <param name="newDirPath"></param>
    		/// <returns></returns>
    		public async Task<string> ReNameDir(string dirPath, string newDirPath)
    		{
    
    			var requestUrl = $"{kodCloudUrl}?explorer/pathRname";
    			return await PostKodApi(requestUrl, new Dictionary<string, string>()
    				{
    					{"path",  dirPath},
    					{"rnameTo",newDirPath }
    				});
    		}
    		/// <summary>
    		/// 批量移动文件或文件夹
    		/// </summary>
    		/// <param name="moveFileModels">要移动的文件</param>
    		/// <param name="targetPath">要移动的地址</param>
    		/// <returns></returns>
    		public async Task<string> MoveFiles(List<MoveFileModel> moveFileModels,string targetPath)
    		{
    
    			var requestUrl = $"{kodCloudUrl}?explorer/pathCuteDrag";
    			return await PostKodApi(requestUrl, new Dictionary<string, string>()
    				{
    					{"dataArr",  JsonConvert.SerializeObject(moveFileModels)},
    					{"path",targetPath}
    				});
    		}
    		/// <summary>
    		/// 批量复制文件或文件夹
    		/// </summary>
    		/// <param name="copyFileModels"></param>
    		/// <param name="targetPath"></param>
    		/// <returns></returns>
    		public async Task<string> CopyFiles(List<CopyFileModel> copyFileModels, string targetPath)
    		{
    
    			var requestUrl = $"{kodCloudUrl}?explorer/pathCopyDrag";
    			return await PostKodApi(requestUrl, new Dictionary<string, string>()
    				{
    					{"dataArr",  JsonConvert.SerializeObject(copyFileModels)},
    					{ "path",targetPath}
    				});
    		}
    		/// <summary>
    		/// 批量删除文件或文件夹
    		/// </summary>
    		/// <param name="deleteFileModels"></param>
    		/// <param name="shiftDelete">true代表彻底删除 false代表移动到回收站</param>
    		/// <returns></returns>
    		public async Task<string> DeleteFiles(List<DeleteFileModel> deleteFileModels,bool shiftDelete=false)
    		{
    
    			var requestUrl = $"{kodCloudUrl}?explorer/pathDelete";
    			var postDataDic = new Dictionary<string, string>()
    				{
    					{"dataArr",  JsonConvert.SerializeObject(deleteFileModels)}
    				};
    			if (shiftDelete)
    			{
    				postDataDic.Add("shiftDelete", "1");
    			}
    			return await PostKodApi(requestUrl, postDataDic);
    		}
    		/// <summary>
    		/// 获取文件内容
    		/// </summary>
    		/// <param name="fileName">文件名</param>
    		/// <returns></returns>
    		public async Task<string> GetFileContent(string fileName)
    		{
    
    			var requestUrl = $"{kodCloudUrl}?editor/fileGet";
    			return await PostKodApi(requestUrl, new Dictionary<string, string>()
    				{
    					{"filename",  fileName}
    				});
    		}
    		/// <summary>
    		/// 保存文件内容
    		/// </summary>
    		/// <param name="fileName"></param>
    		/// <param name="fileStr">保存的内容字符串</param>
    		/// <param name="charSet">编码方式</param>
    		/// <returns></returns>
    		public async Task<string> SaveFileContent( string fileName,string fileStr,string charSet="utf-8")
    		{
    
    			var requestUrl = $"{kodCloudUrl}?editor/fileSave";
    			return await PostKodApi(requestUrl, new Dictionary<string, string>()
    				{
    					{"path",  fileName},
    					{"charset", charSet},
    					{"filestr",fileStr}
    				});
    		}
    		/// <summary>
    		/// 上传文件到可道云
    		/// </summary>
    		/// <param name="fullPath"></param>
    		/// <param name="tarGetFullPath"></param>
    		/// <returns></returns>
    		public async Task<bool> UploadFile(string fullPath, string tarGetFullPath)
    		{
    
    			var requestUrl = $"{kodCloudUrl}?explorer/fileUpload";
    			return await PostFileToKod(requestUrl, fullPath, tarGetFullPath);
    		}
    		/// <summary>
    		/// 下载可道云文件
    		/// </summary>
    		/// <param name="apiUrl">要获取的文件地址</param>
    		/// <param name="filePath">要储存的路径</param>
    		/// <param name="filename">要储存的文件名</param>
    		/// <returns></returns>
    		public async Task<bool> DownLoadFile(string targetFile, string filePath, string filename)
    		{
    			var requestUrl = $"{kodCloudUrl}?explorer/fileDownload&path={targetFile}";
    			return await GetFileToKod(requestUrl,filePath,filename);
    		}
    		/// <summary>
    		/// 压缩文件
    		/// </summary>
    		/// <param name="fileType">要压缩文件格式;格式支持zip、tar、gz</param>
    		/// <param name="zipFileModel">要压缩的文件列表</param>
    		/// <returns></returns>
    		public async Task<string> ZipFile(List<ZipFileModel> zipFileModels, string fileType="zip")
    		{
    
    			var requestUrl = $"{kodCloudUrl}?explorer/zip";
    			return await PostKodApi(requestUrl, new Dictionary<string, string>()
    				{
    					{"dataArr",  JsonConvert.SerializeObject(zipFileModels)},
    					{"fileType",fileType}
    				});
    		}
    		/// <summary>
    		/// 解压文件
    		/// </summary>
    		/// <param name="targetFile">要解压的文件</param>
    		/// <param name="targetFilePath">解压到(不传默认解压到当前文件夹)</param>
    		/// <returns></returns>
    		public async Task<string> UnZipFile(string targetFile,string targetFilePath="")
    		{
    			var requestUrl = $"{kodCloudUrl}?explorer/unzip";
    			var postDataDic = new Dictionary<string, string>()
    				{
    					{"path",  targetFile}
    				};
    			if (!string.IsNullOrEmpty(targetFilePath))
    			{
    				postDataDic.Add("pathTo", targetFilePath);
    			}
    			return await PostKodApi(requestUrl, postDataDic);
    		}
    		#region http请求
    		/// <summary>
    		/// get方式调用可道云api
    		/// </summary>
    		/// <param name="apiUrl"></param>
    		/// <returns></returns>
    		internal async Task<string> GetKodApi(string apiUrl)
    		{
    			var requestUrl = apiUrl;
    			var response = await Client.GetAsync(requestUrl).ConfigureAwait(false);
    			string result = await response.Content.ReadAsStringAsync();
    			var resultRecord = Record.Parse(result);
    			if (resultRecord.Get("code", true) is bool resultCode && resultCode)
    			{
    
    				return resultRecord.GetString("data");
    
    			}
    			return "";
    		}
    		/// <summary>
    		/// post方式请求可道云
    		/// </summary>
    		/// <param name="apiUrl"></param>
    		/// <param name="postDataDic"></param>
    		/// <returns></returns>
    		internal async Task<string> PostKodApi(string apiUrl, Dictionary<string,string> postDataDic)
    		{
    			var requestUrl = apiUrl;
    			HttpContent httpContent = new FormUrlEncodedContent(postDataDic);
    			httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
    			var response = await Client.PostAsync(requestUrl, httpContent).ConfigureAwait(false);
    			string result = await response.Content.ReadAsStringAsync();
    			var resultRecord = Record.Parse(result);
    			if (resultRecord.Get("code", true) is bool resultCode && resultCode)
    			{
    
    				return resultRecord.GetString("data");
    
    			}
    			return "";
    		}
    		/// <summary>
    		/// post文件到可道云
    		/// </summary>
    		/// <param name="fullPath">要上传的文件路径</param>
    		/// <param name="tarGetFullPath">目标文件夹路径</param>
    		/// <returns></returns>
    		internal async Task<bool> PostFileToKod(string apiUrl,string fullPath,string tarGetFullPath)
    		{
    			string reqUrl = apiUrl;
    			string boundary = string.Format("----WebKitFormBoundary{0}", DateTime.Now.Ticks.ToString("x"));
    			MultipartFormDataContent content = new MultipartFormDataContent(boundary);
    			//content.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
    			if (string.IsNullOrEmpty(fullPath) && !File.Exists(fullPath))
    			{
    				return false;
    			}
    			string fileName = Path.GetFileName(fullPath);
    			FileStream fStream = File.Open(fullPath, FileMode.Open, FileAccess.Read);
    			content.Add(new StreamContent(fStream, (int)fStream.Length), "file", fileName);
    			content.Add(new StringContent(tarGetFullPath), "upload_to");
    			content.Add(new StringContent(fileName), "name");
    			var result = await Client.PostAsync(reqUrl, content);
    			try
    			{
    				if (result.IsSuccessStatusCode)
    				{
    					string rslt = result.Content.ReadAsStringAsync().Result;
    					var resultRecord = Record.Parse(rslt);
    					if (resultRecord.Get("code", true) is bool resultCode)
    					{
    
    						return resultCode;
    
    					}
    					return true;
    				}
    			}
    			catch (Exception ex)
    			{
    
    			}
    			finally
    			{
    				fStream.Close();
    				Client.Dispose();
    			}
    
    			return false;
    		}
    		/// <summary>
    		/// get方式获取可道云文件
    		/// </summary>
    		/// <param name="apiUrl">要获取的文件地址</param>
    		/// <param name="filePath">要储存的路径</param>
    		/// <param name="filename">要储存的文件名</param>
    		/// <returns></returns>
    		internal async Task<bool> GetFileToKod(string apiUrl, string filePath, string filename)
    		{
    			var url = apiUrl;
    			FileStream fs;
    			Client.DefaultRequestHeaders.Add("User-Agent", @"Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)");//添加自主驱动 很重要,没细研究,确实添加上就能下载文件
    			Client.DefaultRequestHeaders.Add("Accept", @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");//添加数据格式
    			var bytes =await Client.GetByteArrayAsync(url);
    
    			if (File.Exists(filePath + "//" + filename))
    			{
    				File.Delete(filePath + "//" + filename);
    			}
    			fs = new FileStream(filePath + "//" + filename, FileMode.CreateNew);
    			fs.Write(bytes, 0, bytes.Length);
    			fs.Close();
    			return true;
    		}
    		#endregion
    	}
    

    实体类:

    public class CopyFileModel
    {
    	/// <summary>
    	/// 要复制的类型 file folder
    	/// </summary>
    	public string type { get; set; }
    	/// <summary>
    	/// 要复制的目标文件全路径
    	/// </summary>
    	public string path { get; set; }
    }
    
    public class DeleteFileModel
    {
    	/// <summary>
    	/// 要删除的类型 file folder
    	/// </summary>
    	public string type { get; set; }
    	/// <summary>
    	/// 要删除的目标文件全路径
    	/// </summary>
    	public string path { get; set; }
    }
    
    public class GetFilesAttrModel
    {
    	/// <summary>
    	/// 要获取的类型 file folder
    	/// </summary>
    	public string type { get; set; }
    	/// <summary>
    	/// 要获取文件的全路径
    	/// </summary>
    	public string path { get; set; }
    }
    
    public class MoveFileModel
    {
    	/// <summary>
    	/// 要移动的类型 file folder
    	/// </summary>
    	public string type { get; set; }
    	/// <summary>
    	/// 要移动的目标文件全路径
    	/// </summary>
    	public string path { get; set; }
    
    }
    
    public class ZipFileModel
    {
    	/// <summary>
    	/// 要添加到压缩包的文件类型 file folder
    	/// </summary>
    	public string type { get; set; }
    	/// <summary>
    	/// 要添加到压缩包的文件目标文件全路径
    	/// </summary>
    	public string path { get; set; }
    }
    //dataArr: [{"type":"folder","path":"/test/folder1/"},{"type":"folder","path":"/test/folder2/af.txt"}]
    // 创建文件名为dataArr中第一个path 追加压缩文件扩展名;例如上面的就会压缩成/test/folder1.zip
    

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

    学而不思则罔,思而不学则殆

    你好,我是【咬轮猫】

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

  • 相关阅读:
    html5 鼠标跟随运动
    2018新年计划
    background-attachment:fixed不兼容性
    Javascript中常用方法简介
    FQ教程真实好用
    解决IE6 IE7绝对定位弹层被后面的元素遮住
    页面出现滚动条时,body里面的内容不能自动居中?
    怎么查看手机源码
    ES6入门教程---数值扩展和数组扩展
    ES6入门教程---解构赋值和字符串扩展
  • 原文地址:https://www.cnblogs.com/Hero-/p/13686396.html
Copyright © 2020-2023  润新知