说明
使用 5+api
目前仅测试了app,测试也不完整,这里只是提供一个方法
利用 5+app 中 file.slice方法切片,再转化成base64上传,而我需要的正好就是base64格式
就当是记录一下
代码如下
/**
* 上传文件
* @param {Object} url需要绝对路径
*/
function Upload(url) {
return new Promise(async (resolve, reject) => {
let file;
try {
url = verifyFileUrl(url)
file = await getFileManagerSync(url);
let size = file.size,
chunk = 1048576,
current = 0;
// 开始切片
while (current < size) {
let tmp = file.slice(current, Math.min(current chunk, size));
// 切片后返回的也是 file 对象,直接读取内容
let base64 = await file_reader_as_data_url(tmp);
let r = await UpFile(base64);
current = chunk 1;
}
resolve('上传成功')
} catch (e) {
reject(e)
} finally {
if (file !== undefined) file.close();
}
})
}
/**
* 上传到服务器方法
* @param {Object} base64
*/
function UpFile(base64){
// 文件上传
}
/**
* 文件路径 可能是 file://store/ 开头
* @param {Object} str 文件路径
*/
function verifyFileUrl(str) {
if (str.startsWith('file://')) {
str = str.substring(7)
}
return str
}
/**
* 使用5 app 获取file对象
* @param {Object} fileName
*/
function getFileManagerSync(fileName) {
return new Promise((resolve, reject) => {
plus.io.resolveLocalFileSystemURL(fileName, function(fs) {
fs.file(function(file) {
resolve((file))
})
}, err => {
reject(err)
})
})
}
/**
* 读取文件对象的 base64字符串
* @param {Object} file 5 app 的 文件对象
*/
function file_reader_as_data_url(file){
return new Promise((resolve,reject)=>{
try{
let fileReader =new plus.io.FileReader();
fileReader.onloadend = function(evt) {
resolve(evt.target.result)
};
fileReader.readAsDataURL(file,'UTF-8');
}catch(e){
//TODO handle the exception
reject(e)
}
})
}
3 个评论
要回复文章请先登录或注册
c***@163.com
秋望 (作者)
1***@qq.com