代码:

      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帮助类的更多相关文章

  1. ShowDoc,APIDoc,可道云API,语雀-适合IT企业的文档工具

    ShowDoc,APIDoc,可道云API,语雀-适合IT企业的文档工具 一.ShowDoc官方文档及说明 1.1 它可以用来做什么 1.2 它都有些什么功能 1.3 使用在线的ShowDoc 1.4 ...

  2. 腾讯云linux+kodexplorer可道云搭建私有云盘

    kodexplorer可道云介绍KodExplorer可道云,原名芒果云,是基于Web技术的私有云和在线文件管理系统.致力于为用户提供安全可控.可靠易用.高扩展性的私有云解决方案.用户只需通过简单环境 ...

  3. [Python] 使用有道翻译API

    Python 使用youdao (有道翻译)API 想写一个给自己记录背单词状况的软件,需要获取英文单词的中文释义(基本功能).考虑使用有道翻译的API实现获取英文单词的中文释义的方法. 获取API_ ...

  4. 阿里云API网关(11)API的三种安全认证方式

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  5. 阿里云API网关(9)常见问题

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  6. 阿里云API网关(6)用户指南(开放 API )

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  7. 又拍云 API 使用的那些小事

    又拍云提供了丰富的 API 调用,为了减少用户在初次接入时可能会遇到的坑”,本文将对又拍云常用的 API 使用方法做个简单的梳理,力求让业务接入变得更简单,更高效. 目前我们的 API 主要有四大类, ...

  8. 禅道 Rest API 开发

    在老的 PHP 系统中使用 PHP 5.3以后的库 所谓老的系统,是指没有使用PHP 5.3以上命名空间(namespace)特性编码的系统. 但是,只要你的系统运行在 PHP 5.3及以上的环境,在 ...

  9. openstack操作之二 restful api

    Restful api 是openstack各服务调用的接口,简单理解为可以通过网络去调用的函数.postman是一款前端调用工具,测试后端接口的时候往往是使用该工具去验证.在openstack的使用 ...

随机推荐

  1. switch case语句,switch case用法详解

    switch 是"开关"的意思,它也是一种"选择"语句,但它的用法非常简单.switch 是多分支选择语句.说得通俗点,多分支就是多个 if. 从功能上说,sw ...

  2. C语言可变参函数分析

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  3. AggregateReport V2.2.0

    1. 说明 AggregateReport V2.2.0终于跟大家见面了!从V1.0.0到V2.2.0 宝路听取了很多同学的建议!感谢大家一路的信任与支持! 2. 文章导读 如果不了解此工具的同学,建 ...

  4. Android 系统开发做什么?

    题外话 18 年我从 Android 应用开发转 Framework 层开发了,从此开启了 996 幸福生活,博客技术文更新基本停滞了,被工作占据了过多的精力,实在没时间像以前一样拟稿.写作,实践.反 ...

  5. Kubernetes 常见问题总结

    Kubernetes 常见问题总结 如何删除不一致状态下的 rc,deployment,service 在某些情况下,经常发现 kubectl 进程挂起现象,然后在 get 时候发现删了一半,而另外的 ...

  6. 第13 章 : Kubernetes 网络概念及策略控制

    Kubernetes 网络概念及策略控制 本文将主要分享以下 5 方面的内容: Kubernetes 基本网络模型: Netns 探秘: 主流网络方案简介: Network Policy 的用处: 思 ...

  7. 学习笔记-angular 使用uuid

    import { UUID } from 'angular2-uuid'; let uuid = UUID.UUID().replace(/-/g, '').toLocaleUpperCase(); ...

  8. 阅读《构建之法》之FAQ

    注:本文档已提交Github,地址是这个 欢迎大家通过PR的方式或者在本博客下留言的方式随时补充意见和建议,我们会持续更新 书中7.2.4的表7-1 MSF团队模型和关键质量目标里面提到的" ...

  9. CIE标准色度系统(上)

    一.颜色匹配 为了满足工业生产对颜色特性的定量化和标准化的需要,由国际照明委员会(CIE)的协调和指导下,先后提出CIE1931和CIE1964标准色度观察者光谱三刺激值,由此奠定了现代色度学基础. ...

  10. C#与Python交互方式

    前言: 在平时工作中,需求有多种实现方式:根据不同的需求可以采用不同的编程语言来实现.发挥各种语言的强项 如:Python的强项是:数据分析.人工智能等 .NET 开发桌面程序界面比Python更简单 ...