async function getFile(path) {
return fetch("/api/file/getFile", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
path,
}),
}).then((response) => {
if (response.ok) {
// 返回 Blob 对象而不是文本
return response.blob();
} else {
throw new Error("Failed to get file content");
}
}).catch((error) => {
console.error(error);
});
}
// 提取文件名的函数
function extractFileNameFromPath(filePath) {
// 使用 split() 方法按 '/' 分割路径,取最后一部分
const parts = filePath.split('/');
return parts[parts.length - 1];
}
// 封装上传文件的函数
async function uploadFile(filePath, uploadUrl, authToken) {
try {
// 获取文件内容作为 Blob
const fileBlob = await getFile(filePath);
// 自动提取文件名
const fileName = extractFileNameFromPath(filePath);
// 创建 FormData 并添加文件
const formdata = new FormData();
formdata.append("file[]", fileBlob, fileName);
// 设置请求头,包括 Authorization
const myHeaders = new Headers();
myHeaders.append("Authorization", `token ${authToken}`);
myHeaders.append("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36");
const requestOptions = {
method: 'POST',
headers: myHeaders,
body: formdata,
redirect: 'follow'
};
// 发送请求并解析响应为 JSON
const response = await fetch(uploadUrl, requestOptions);
const result = await response.json();
// 返回上传结果
return result;
} catch (error) {
console.error('Error:', error);
throw error; // 抛出错误以便调用者处理
}
}
// 调用示例
(async () => {
try {
const filePath = '/data/assets/image-20240506132258-jw0ztq7.png'; // 文件路径
const uploadUrl = "https://ld246.com/upload/editor"; // 上传地址
const authToken = ""; // 链滴社区授权令牌
// 调用上传函数并获取结果
const uploadResult = await uploadFile(filePath, uploadUrl, authToken);
console.log('Upload Result:', uploadResult);
} catch (error) {
console.error('Upload Failed:', error);
}
})();
