代码:

      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. Hexagon HDU - 6862

    题目链接:https://vjudge.net/problem/HDU-6862 题意: 由六边形组成的圆形图案,要求不重复走遍历每一个小六边形. 思路:https://www.cnblogs.com ...

  2. 干掉前端!3分钟纯 Java 注解搭个管理系统

    大家好,我是小富~ 最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下. 在我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护 ...

  3. 全面了解Vue3的 reactive 和相关函数

    Vue3的 reactive 怎么用,原理是什么,官网上和reactive相关的那些函数又都是做什么用处的?这里会一一解答. ES6的Proxy Proxy 是 ES6 提供的一个可以拦截对象基础操作 ...

  4. 洛谷P1290欧几里德游戏

    题目地址 题目大意: 两个人st和ol博弈 有两个整数n,m 每次轮到一个人时候,需要选择用大的那个数减去小的那个数的倍数(不能减为负数) 最后得到0的为胜利者 思路: (以下讨论均在n<m的条 ...

  5. 分享一次排查CLOSE_WAIT过多的经验

    关键词:TCP.CLOSE_WAIT 问题背景 某日下午有测试人员急匆匆的跑来跟我反馈:"有客户反馈供应商附件预览不了,流程阻塞,需要紧急处理",我立马精神起来,毕竟都是付费客户( ...

  6. maven中心仓库OSSRH使用简介

    目录 简介 为什么使用中心仓库 发布到中心仓库前的准备工作 使用OSSRH 使用Sonatype创建ticket 中央仓库中的组件要求 提供Javadoc 和源代码 使用GPG/PGP给文件签名 Me ...

  7. 创建第一个HTML文件

    首先右键新建文本文档,然后打开新建的文档,文本内容写上: <html> <head> <title>我的HTML标题</title> </head ...

  8. java面试-谈谈你对OOM的理解

    一.OOM(OutOfMemoryError): 对象无法释放或无法被垃圾回收,造成内存浪费,导致程序运行速度减慢,甚至系统崩溃等严重后果,就是内存泄漏.多个内存泄漏造成可使用内存变少,会导致内存溢出 ...

  9. 【设计模式】- 生成器模式(Builder)

    生成器模式 建造者模式.Builder 生成器模式 也叫建造者模式,可以理解成可以分步骤创建一个复杂的对象.在该模式中允许你使用相同的创建代码生成不同类型和形式的对象. 生成器的结构模式 生成器(Bu ...

  10. Python简单实现杨辉三角

    n=input("请输入要打印的行数")n=int(n)for x in range(0,n+1): p=1 print(''.rjust(n-x),end="" ...