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
												
											c#操作可道云api帮助类的更多相关文章
- ShowDoc,APIDoc,可道云API,语雀-适合IT企业的文档工具
		
ShowDoc,APIDoc,可道云API,语雀-适合IT企业的文档工具 一.ShowDoc官方文档及说明 1.1 它可以用来做什么 1.2 它都有些什么功能 1.3 使用在线的ShowDoc 1.4 ...
 - 腾讯云linux+kodexplorer可道云搭建私有云盘
		
kodexplorer可道云介绍KodExplorer可道云,原名芒果云,是基于Web技术的私有云和在线文件管理系统.致力于为用户提供安全可控.可靠易用.高扩展性的私有云解决方案.用户只需通过简单环境 ...
 - [Python] 使用有道翻译API
		
Python 使用youdao (有道翻译)API 想写一个给自己记录背单词状况的软件,需要获取英文单词的中文释义(基本功能).考虑使用有道翻译的API实现获取英文单词的中文释义的方法. 获取API_ ...
 - 阿里云API网关(11)API的三种安全认证方式
		
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
 - 阿里云API网关(9)常见问题
		
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
 - 阿里云API网关(6)用户指南(开放 API )
		
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
 - 又拍云 API 使用的那些小事
		
又拍云提供了丰富的 API 调用,为了减少用户在初次接入时可能会遇到的坑”,本文将对又拍云常用的 API 使用方法做个简单的梳理,力求让业务接入变得更简单,更高效. 目前我们的 API 主要有四大类, ...
 - 禅道 Rest API 开发
		
在老的 PHP 系统中使用 PHP 5.3以后的库 所谓老的系统,是指没有使用PHP 5.3以上命名空间(namespace)特性编码的系统. 但是,只要你的系统运行在 PHP 5.3及以上的环境,在 ...
 - openstack操作之二 restful api
		
Restful api 是openstack各服务调用的接口,简单理解为可以通过网络去调用的函数.postman是一款前端调用工具,测试后端接口的时候往往是使用该工具去验证.在openstack的使用 ...
 
随机推荐
- switch case语句,switch case用法详解
			
switch 是"开关"的意思,它也是一种"选择"语句,但它的用法非常简单.switch 是多分支选择语句.说得通俗点,多分支就是多个 if. 从功能上说,sw ...
 - C语言可变参函数分析
			
code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...
 - AggregateReport V2.2.0
			
1. 说明 AggregateReport V2.2.0终于跟大家见面了!从V1.0.0到V2.2.0 宝路听取了很多同学的建议!感谢大家一路的信任与支持! 2. 文章导读 如果不了解此工具的同学,建 ...
 - Android 系统开发做什么?
			
题外话 18 年我从 Android 应用开发转 Framework 层开发了,从此开启了 996 幸福生活,博客技术文更新基本停滞了,被工作占据了过多的精力,实在没时间像以前一样拟稿.写作,实践.反 ...
 - Kubernetes 常见问题总结
			
Kubernetes 常见问题总结 如何删除不一致状态下的 rc,deployment,service 在某些情况下,经常发现 kubectl 进程挂起现象,然后在 get 时候发现删了一半,而另外的 ...
 - 第13 章 : Kubernetes 网络概念及策略控制
			
Kubernetes 网络概念及策略控制 本文将主要分享以下 5 方面的内容: Kubernetes 基本网络模型: Netns 探秘: 主流网络方案简介: Network Policy 的用处: 思 ...
 - 学习笔记-angular 使用uuid
			
import { UUID } from 'angular2-uuid'; let uuid = UUID.UUID().replace(/-/g, '').toLocaleUpperCase(); ...
 - 阅读《构建之法》之FAQ
			
注:本文档已提交Github,地址是这个 欢迎大家通过PR的方式或者在本博客下留言的方式随时补充意见和建议,我们会持续更新 书中7.2.4的表7-1 MSF团队模型和关键质量目标里面提到的" ...
 - CIE标准色度系统(上)
			
一.颜色匹配 为了满足工业生产对颜色特性的定量化和标准化的需要,由国际照明委员会(CIE)的协调和指导下,先后提出CIE1931和CIE1964标准色度观察者光谱三刺激值,由此奠定了现代色度学基础. ...
 - C#与Python交互方式
			
前言: 在平时工作中,需求有多种实现方式:根据不同的需求可以采用不同的编程语言来实现.发挥各种语言的强项 如:Python的强项是:数据分析.人工智能等 .NET 开发桌面程序界面比Python更简单 ...