上传文件、图片到个人坚果云空间
- 需要在代码中配置好坚果云帐号与密码
- 在坚果云中提前创建好一个目录专门存放utools上传的内容
支持图片上传,文件上传,多文件上传
目录上传有bug 建议不要开启目录类型的文件匹配,目录上传只能保证目录创建成功,子文件上传的成功率由网速决定,网速越快成功上传的东西越多
效果
// 坚果云帐号
const username = '';
// 坚果云密码
const passwd = '';
// 指定上传的目录名
const targetFolder = 'utools-f';
let url = 'https://www.jianguoyun.com';
function getFileNames(arr) {
let splitChar = '/';
if (utools.isWindows()) {
splitChar = '\\';
}
let names = [];
for (let item of arr) {
names.push(item.split(splitChar).pop());
}
return names;
}
// 判断上传文件类型 只允许上传多个文件或者单个目录
let filePayload = undefined;
let uploadType = 'file';
if ('img' === ENTER.type) {
filePayload = ENTER.payload;
} else if ('files' === ENTER.type) {
let files = [], dirs = [];
for (let v of ENTER.payload) {
if (v.isFile) {
files.push(v.path);
} else {
dirs.push(v.path);
}
}
// 有目录优先选择目录
filePayload = dirs.length ? [dirs[0]] : files;
uploadType = dirs.length ? 'dir' : 'file';
}
let ub = utools.ubrowser;
// ub.clearCookies(url); // 如果想每次都自动登录,不维持会话则开启此行注释
ub.goto(url);
ub.when('#login-link') // 未登录先去登录
.value('#login_email', username)
.value('#login_password', passwd)
.click('#login_form > div.input > button')
.wait(() => document.querySelectorAll('.file-normal-row').length > 0, 30000)
.end()
.show()
.wait(() => {
return document.querySelectorAll('span.sandboxName').length > 0;
})
.wait((targetFolder) => {
let items = document.querySelectorAll('span.sandboxName');
for (let item of items) {
if (item.innerText === targetFolder) {
item.click();
return true;
}
}
throw new Error('指定的目录 ' + targetFolder + ' 不存在');
}, 10000, targetFolder)
.wait('#upload_file_input');
if ('file' === uploadType || 'dir' === uploadType) {
// 判断是否存在同名文件 存在则不上传 坚果云会覆盖上传同名文件
ub.wait((names) => {
let existFiles = [];
let items = document.querySelectorAll('#file_list_container li .file-name-text');
for (let item of items) {
existFiles.push(item.innerText);
}
let e = names.filter(v => existFiles.includes(v));
if (e.length) {
throw new Error("文件 " + e.join(',') + ' 已存在,请手动上传覆盖');
}
return true;
}, 20000, getFileNames(filePayload));
}
if ('file' === uploadType) {
ub.file('#upload_file_input', filePayload);
} else if ('dir' === uploadType) {
ub.file('#upload_dir_input', filePayload);
}
ub.wait('.success')
.evaluate(() => {
return document.querySelector('.success').innerText;
})
.click('div > .close');
ub.run({
show: false,
width: 1150
})
.then(res => {
let message = "运行成功";
if (res.length) {
message = res[0];
}
utools.showNotification(message);
})
.catch(err => {
let message = "故障,也不知道因为啥";
if (err.message) {
message = err.message;
}
utools.showNotification(message);
});