梦汐 发表于 2023-4-2 06:53

【js】webdav坚果云

```
const webdav = {
Account: "坚果云账号",
Password: "坚果云密匙",
NewFolder: function (FolderName) {
      let url = `https://dav.jianguoyun.com/dav/${FolderName}/`
      let type = "MKCOL"
      let header = { "authorization": `Basic ${btoa(this.Account + ':' + this.Password)}` }
      return new Promise(
          (complete, error) => {
            GM_xmlhttpRequest({
                  method: type,
                  timeout: 3000,
                  headers: header,
                  url: url,
                  onload: complete,
                  onerror: error,
                  ontimeout: error
            })
          }
      )
},
UploadFiles: function (FolderName, FileName, FileData, DataType) {
      let url = `https://dav.jianguoyun.com/dav/${FolderName}/${FileName}`
      let type = "PUT"
      let header = { "authorization": `Basic ${btoa(this.Account + ':' + this.Password)}` }
      return new Promise(
          (complete, error) => {
            GM_xmlhttpRequest({
                  method: type,
                  timeout: 3000,
                  data: FileData,
                  headers: header,
                  url: url,
                  dataType: DataType,
                  onload: complete,
                  onerror: error,
                  ontimeout: error
            })
          }
      )
},
DownloadAFile: function (FolderName, FileName) {
      let url = `https://dav.jianguoyun.com/dav/${FolderName}/${FileName}`
      let type = "GET"
      let header = { "authorization": `Basic ${btoa(this.Account + ':' + this.Password)}` }
      return new Promise(
          (complete, error) => {
            GM_xmlhttpRequest({
                  method: type,
                  timeout: 3000,
                  headers: header,
                  url: url,
                  onload: complete,
                  onerror: error,
                  ontimeout: error
            })
          }
      )
},
GetAllFile: function (path, depth) {
      return new Promise((resolve, reject) => {
          GM_xmlhttpRequest({
            method: "PROPFIND",
            url: "https://dav.jianguoyun.com/dav/" + path,
            headers: {
                  "Authorization": `Basic ${btoa(this.Account + ':' + this.Password)}`,
                  "Depth": depth
            },
            onload: function (response) {
                  if (response.status == 207) {
                      var parser = new DOMParser();
                      var xmlDoc = parser.parseFromString(response.responseText, "text/xml");
                      var responses = xmlDoc.getElementsByTagNameNS("DAV:", "response");
                      var urls = [];
                      for (var i = 0; i < responses.length; i++) {
                        var href = responses.getElementsByTagNameNS("DAV:", "href").textContent;
                        var propstat = responses.getElementsByTagNameNS("DAV:", "propstat");
                        var status = propstat.getElementsByTagNameNS("DAV:", "status").textContent;
                        if (status.includes("200 OK")) {
                              var resourcetype = propstat.getElementsByTagNameNS("DAV:", "resourcetype");
                              if (resourcetype.getElementsByTagNameNS("DAV:", "collection").length > 0) {
                                  href += "/";
                              }
                              urls.push(href);
                        }
                      }
                      resolve(urls);
                  }
                  else {
                      console.error(response);
                      reject(new Error("The request failed with status code " + response.status));
                  }
            }
          });
      });
},
ExistsFile: function (path) {
      return new Promise((resolve, reject) => {
          GM_xmlhttpRequest({
            method: "HEAD",
            url: "https://dav.jianguoyun.com/dav/" + path,
            headers: {
                  "Authorization": `Basic ${btoa(this.Account + ':' + this.Password)}`
            },
            onload: function (response) {
                  var status = response.status;
                  // 如果状态码是200,表示文件夹存在
                  if (status == 200) {
                      resolve(true)
                  }
                  // 如果状态码是404,表示文件夹不存在
                  else if (status == 404) {
                      resolve(false)
                  } else if (status == 403) {
                      resolve(false)
                      reject("权限不足,拒绝访问")
                  }
                  else {
                      reject("The status code is " + status + " and the status text is " + response.statusText)
                  }
            }
          });
      }
      )
}
}
webdav.ExistsFile('debug').then(
async r => {
      if (!r) {//不存在
          await webdav.NewFolder('debug')
      }
      console.log(await webdav.UploadFiles('debug', 'hi.js', "{js:'hi'}", "json"));
}
)
```

feiyu361 发表于 2023-4-2 09:33

弱弱的问下,这个怎么用?

梦汐 发表于 2023-4-2 07:07


```
class webdav {
    constructor(Account, Password) {
      this.Account = Account
      this.Password = Password
    }
    NewFolder(FolderName) {
      let url = `https://dav.jianguoyun.com/dav/${FolderName}/`
      let type = "MKCOL" // 新建
      let header = { "authorization": `Basic ${btoa(this.Account + ':' + this.Password)}` }
      return new Promise(
            (complete, error) => {
                GM_xmlhttpRequest({
                  method: type,
                  timeout: 3000,
                  headers: header,
                  url: url,
                  onload: complete,
                  onerror: error,
                  ontimeout: error
                })
            }
      )
    }
    UploadFiles(FolderName, FileName, FileData, DataType) {
      let url = `https://dav.jianguoyun.com/dav/${FolderName}/${FileName}`
      let type = "PUT" // 上传
      let header = { "authorization": `Basic ${btoa(this.Account + ':' + this.Password)}` }
      return new Promise(
            (complete, error) => {
                GM_xmlhttpRequest({
                  method: type,
                  timeout: 3000,
                  data: FileData,
                  headers: header,
                  url: url,
                  dataType: DataType,
                  onload: complete,
                  onerror: error,
                  ontimeout: error
                })
            }
      )
    }
    DownloadFile(FolderName, FileName) {
      let url = `https://dav.jianguoyun.com/dav/${FolderName}/${FileName}`
      let type = "GET" // 上传
      let header = { "authorization": `Basic ${btoa(this.Account + ':' + this.Password)}` }
      return new Promise(
            (complete, error) => {
                GM_xmlhttpRequest({
                  method: type,
                  timeout: 3000,
                  headers: header,
                  url: url,
                  onload: complete,
                  onerror: error,
                  ontimeout: error
                })
            }
      )
    }
    GetAllFile(path, depth) {
      return new Promise((resolve, reject) => {
            GM_xmlhttpRequest({
                method: "PROPFIND",
                url: "https://dav.jianguoyun.com/dav/" + path,
                headers: {
                  "Authorization": `Basic ${btoa(this.Account + ':' + this.Password)}`,
                  "Depth": depth
                },
                onload: function (response) {
                  if (response.status == 207) {
                        var parser = new DOMParser();
                        var xmlDoc = parser.parseFromString(response.responseText, "text/xml");
                        var responses = xmlDoc.getElementsByTagNameNS("DAV:", "response");
                        var urls = [];
                        for (var i = 0; i < responses.length; i++) {
                            var href = responses.getElementsByTagNameNS("DAV:", "href").textContent;
                            var propstat = responses.getElementsByTagNameNS("DAV:", "propstat");
                            var status = propstat.getElementsByTagNameNS("DAV:", "status").textContent;
                            if (status.includes("200 OK")) {
                              var resourcetype = propstat.getElementsByTagNameNS("DAV:", "resourcetype");
                              if (resourcetype.getElementsByTagNameNS("DAV:", "collection").length > 0) {
                                    href += "/";
                              }
                              urls.push(href);
                            }
                        }
                        resolve(urls);
                  }
                  else {
                        console.error(response);
                        reject(new Error("The request failed with status code " + response.status));
                  }
                }
            });
      });
    }
    ExistsFile(path) {
      return new Promise((resolve, reject) => {
            console.log(this);
            GM_xmlhttpRequest({
                method: "HEAD",
                url: "https://dav.jianguoyun.com/dav/" + path,
                headers: {
                  "Authorization": `Basic ${btoa(this.Account + ':' + this.Password)}`
                },
                onload: function (response) {
                  var status = response.status;
                  // 如果状态码是200,表示文件夹存在
                  if (status == 200) {
                        resolve(true)
                  }
                  // 如果状态码是404,表示文件夹不存在
                  else if (status == 404) {
                        resolve(false)
                  } else if (status == 403) {
                        resolve(false)
                        reject("权限不足,拒绝访问")
                  }
                  else {
                        reject("The status code is " + status + " and the status text is " + response.statusText)
                  }
                }
            });
      }
      )
    }
}
```

tt9527 发表于 2023-4-2 10:31

支持楼主!!!

954995880 发表于 2024-2-29 11:32

点赞, 找了好就没找到, 感谢分享

Coeic 发表于 2024-3-1 17:29

楼主有详细教程吗?

alex701 发表于 2024-4-18 09:28

不会用,求下教程{:1_896:}
页: [1]
查看完整版本: 【js】webdav坚果云