首页 > 其他分享 >autojs 坚果云上传文件跟下载

autojs 坚果云上传文件跟下载

时间:2024-04-17 16:22:29浏览次数:21  
标签:string res JgySDK httpRes fileName 坚果 autojs let 上传

例子:

点击查看代码

/** 坚果云 */
let Jgy = JianGuoYunHelper();
// 初始化
Jgy.init("username", "password", "坚果云测试_数据备份");
// 文件名
Jgy.setThisFileName("测试文件");

// 上传数据 (覆盖)
let putRes = Jgy.put("测试数据 测试数据 测试数据");
// 获取数据
let remoteData = Jgy.get();


点击查看代码
/**
 * 坚果云文本文件 上传/下载
 */
function JianGuoYunHelper() {
  /**
   * 坚果云SDK
   */
  function JgySDK() {}
  /**
   * 初始化
   * @param {*} username
   * @param {*} password
   * @param {*} folderName 操作的文件夹名称
   */
  JgySDK.prototype.init = function (username, password, folderName) {
    this.folderName = folderName;
    this.jgyHost = "http://dav.jianguoyun.com/dav/" + this.folderName + "/";
    this.key = this.getBase64(username + ":" + password);
    this.header = {
      Authorization: "Basic " + this.key,
      "Content-Type": "text/plain;charset=UTF-8",
      Connection: "Keep-Alive",
      "Accept-Encoding": "gzip",
      "User-Agent": "okhttp/3.12.1",
    };
    this.fileName = "";
    this.createFolder();
  };

  /**
   * 设置 操作的fileName, 之后的方法不再需要传 fileName
   * @param {string} fileName
   * @param {string?} fileExtension 可空, 默认 "txt"
   */
  JgySDK.prototype.setThisFileName = function (fileName, fileExtension) {
    if (fileExtension == void 0) {
      fileExtension = "txt";
    }

    this.fileName = fileName + "." + fileExtension;
  };

  /**
   * 读取文件夹的目录
   * @returns {string[]}
   */
  JgySDK.prototype.getFolderCatalog = function () {
    let httpRes = http.request(this.jgyHost, {
      method: "PROPFIND",
      headers: this.header,
    });
    let resArr = [];
    let xmlData = httpRes.body.string();
    if (xmlData) {
      let dataArr = xmlData.match(/<d:displayname>(.*?)<\/d:displayname>/g);
      for (let item of dataArr) {
        item = item.replace("<d:displayname>", "").replace("</d:displayname>", "");
        if (item != this.folderName) {
          resArr.push(item);
        }
      }
    }
    return resArr;
  };

  /**
   * 创建文件夹
   *
   * @private 私有方法
   * @returns {boolean}
   */
  JgySDK.prototype.createFolder = function () {
    let httpRes = http.request(this.jgyHost, {
      method: "MKCOL",
      headers: this.header,
    });
    return httpRes.statusCode == 201;
  };

  /**
   * 获取thisFileName
   * @private 私有方法
   * @param {string} fileName
   * @returns {string}
   */
  JgySDK.prototype.getThisFileName = function (fileName) {
    if (fileName == void 0) {
      if (this.fileName != "") {
        fileName = this.fileName;
      } else {
        throw "当前必须传fileName, 调用setThisFileName后,才可以不传fileName";
      }
    }
    return fileName;
  };
  /**
   * 删除一个文件
   * @param {string?} fileName 可空, 需要提前调用 setThisFileName
   */
  JgySDK.prototype.delete = function (fileName) {
    let res = { res: false, msg: "删除失败" };

    try {
      fileName = this.getThisFileName(fileName);
      let fileArr = this.getFolderCatalog();
      if (fileArr.indexOf(fileName) > -1) {
        http.request(this.jgyHost + fileName, {
          method: "DELETE",
          headers: this.header,
        });
        fileArr = this.getFolderCatalog();
        if (fileArr.indexOf(fileName) < 0) {
          res.res = true;
          res.msg = "删除成功";
        } else {
          res.msg = "删除失败,文件依然在目录中";
        }
      } else {
        res.res = true;
        res.res = "文件不存在,无需删除";
      }
    } catch (error) {
      res.msg = error;
    }
    return res;
  };

  /**
   * 获取一个文件内容
   * @param {string?} fileName 可空, 需要提前调用 setThisFileName
   */
  JgySDK.prototype.get = function (fileName) {
    let res = "";
    try {
      fileName = this.getThisFileName(fileName);
      let httpRes = http.get(this.jgyHost + fileName, {
        headers: this.header,
      });
      //log(httpRes);
      if (httpRes.statusCode == 404) {
        let strRes = httpRes.body.string();
        if (strRes.indexOf("doesn't exist") > -1) {
          let errorMsg = "无备份文件,文件名:" + fileName;
          toast(errorMsg);
          console.error(errorMsg);
        } else {
          throw strRes;
        }
      } else if (httpRes.statusCode == 200) {
        res = httpRes.body.string();
      } else {
        throw httpRes;
      }
    } catch (error) {
      console.error("JgySDK get error: " + error);
    }
    return res;
  };

  /**
   * 上传一个文件
   * @param {string} path
   * @param {string?} fileName 可空, 需要提前调用 setThisFileName
   */
  JgySDK.prototype.put = function (data, fileName) {
    let res = { res: false, msg: "上传失败" };
    try {
      fileName = this.getThisFileName(fileName);
      let httpRes = http.request(this.jgyHost + fileName, {
        method: "PUT",
        headers: this.header,
        body: data,
      });

      let newdata = this.get(fileName);

      if (newdata == data) {
        res.res = true;
        res.msg = "本地数据 推送到 坚果云 成功";
      } else {
        res.msg = "数据推送失败,推送后网络数据与本次数据不同,result:" + httpRes.body.string();
      }
    } catch (error) {
      res.msg = error;
    }
    return res;
  };

  /**
   * 获取base64 结果
   * @private 私有方法
   * @param {string} str
   * @returns {string}
   */
  JgySDK.prototype.getBase64 = function (str) {
    return java.lang.String(android.util.Base64.encode(java.lang.String(str).getBytes(), 2));
  };

  return new JgySDK();
}


标签:string,res,JgySDK,httpRes,fileName,坚果,autojs,let,上传
From: https://www.cnblogs.com/NPCBOT/p/18141046

相关文章

  • 文件上传漏洞
    文件上传漏洞原理  文件上传漏洞较好理解,简单来说就是渗透者往目标主机植入了一个后门程序,使得渗透者随时可以通过这个后门程序来访问到主机的系统,从而获取不法信息,通常也叫WebShell攻击。  关于文件上传漏洞的教程,这里强烈推荐看看b站的视频:https://www.bilibili.com/v......
  • 基于SpringWeb MultipartFile文件上传、下载功能
    在Web开发中,文件上传是一个常见的功能需求。Spring框架提供了MultipartFile接口,用于处理文件上传请求。MultipartFile可以代表一个多部分文件上传请求中的一个文件,提供了一系列方法用于获取文件的各种属性和内容,使得在后端处理文件上传变得十分方便。下面我们将介绍MultipartFile......
  • 给picgo上传的图片加个水印
    之前给大家介绍了picgo和免费的图床神器。我们本可以开开心心的进行markdown写作了。但是总是会有那么一些爬虫网站过来爬你的文章,还把你的文章标明是他们的原著。咋办呢?这里有一个好的办法就是把markdown中上传的图片加上自己的水印不就行了。说干就干。接下来我会介绍如何在pi......
  • 前端大文件分片上传
    1.分片上传整体流程开始上传:前端启动文件分片上传。后端返回唯一标识。分片上传:获取到上传的文件,然后设置一个固定的分片大小,将文件切成多个小片,计算出每一个分片的MD5值(32位)。将每个分片的内容和MD5标识符一同上传至服务器。服务端接收每个分片及相关信息后,通过对每个分片进行校......
  • 博客园上传图片
    博客园上传图片b溃的几天这几天经历了太多终于能上传图片了记录一下(重装系统前忘记把图片拖出来了只拖出来了笔记以前写的笔记现在是txt纯文本蠢的没话)参考了师傅的一篇文章博客园上传markdown文件工具放在了python3环境下成功的(不知道是不是因为这个)下载PyYAML包将.......
  • 通用的上传下载(线程)
    packagecom.duxiang.backgroundmanagement.controller;importcn.hutool.core.io.FileUtil;importcn.hutool.core.util.StrUtil;importcom.duxiang.backgroundmanagement.common.Result;importorg.springframework.web.bind.annotation.*;importorg.springframework.web.......
  • 短视频app源码,一文带你轻松搞懂前端大文件上传思路
    短视频app源码,一文带你轻松搞懂前端大文件上传思路文件上传是我们在平时开发短视频app源码中经常会遇到的业务,如果只是简单的文件上传那还不足以作为项目亮点,而当我们给它加上切片、续传的功能,就不一样了。本文会带大家搞明白这些功能的实现思路,主要聚焦于前端部分,基于Vue3......
  • 在线直播系统源码,前后端大文件上传代码分析
    在线直播系统源码,前后端大文件上传代码分析前端代码:<template><div><[email protected]="hanldeClick"class="upload_container"><inputname="请上传文件"type="file"ref="uploadRef"......
  • typora上传图片问题
    typora上传博客园教程来源https://www.bilibili.com/video/BV1Rv4y1Y7KH/?spm_id_from=333.337.search-card.all.click&vd_source=66ac5da514fe1be9729ebba538a11951下载工具链接:https://pan.baidu.com/s/1e1iVqoA7vAsBT8lir11z2Q?pwd=5axe提取码:5axe配置步骤开启控制面板-......
  • nexus 3.49 手动上传本地jar包记录
    1.登录nexus网页管理平台:http://192.168.3.100:8081/2.下载要上传的jar包https://releases.aspose.com/zh/diagram/java/22-12/ 3.选择要上传的库 4.上传 5.找到验证对应包,并使用 ......