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[i].getElementsByTagNameNS("DAV:", "href")[0].textContent; var propstat = responses[i].getElementsByTagNameNS("DAV:", "propstat")[0]; var status = propstat.getElementsByTagNameNS("DAV:", "status")[0].textContent; if (status.includes("200 OK")) { var resourcetype = propstat.getElementsByTagNameNS("DAV:", "resourcetype")[0]; 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")); } ) |
类
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[i].getElementsByTagNameNS("DAV:", "href")[0].textContent; var propstat = responses[i].getElementsByTagNameNS("DAV:", "propstat")[0]; var status = propstat.getElementsByTagNameNS("DAV:", "status")[0].textContent; if (status.includes("200 OK")) { var resourcetype = propstat.getElementsByTagNameNS("DAV:", "resourcetype")[0]; 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) } } }); } ) } } |