目录
读写文件
使用的是 HTML5产业联盟提供的方法
通过plus.io可获取文件系统管理对象。
IO模块管理本地文件系统,用于对文件系统的目录浏览、文件的读取、文件的写入等操作。
IO里面有个方法
- requestFileSystem: 请求本地文件系统对象
-
plus.io.requestFileSystem( type, succesCB, errorCB );
-
参数:
- type: ( Number ) 必选 本地文件系统常量
可取plus.io下的常量,如plus.io.PRIVATE_DOC、plus.io.PUBLIC_DOCUMENTS等。
- succesCB: ( FileSystemSuccessCallback ) 必选 请求文件系统成功的回调
- errorCB: ( FileErrorCallback ) 可选 请求文件系统失败的回调
- 应用私有文档目录,对应常量plus.io.PRIVATE_DOC,仅应用自身可读写
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
console.error('请求文件系统成功', fs);
},
function(err) {
console.error('请求文件系统失败', err);
}
);
请求成功返回的fs里面有个属性 root, fs.root是根目录操作对象DirectoryEntry,里面提供了创建打开文件方法
- getFile: 创建或打开文件
-
entry.getFile( path, flag, succesCB, errorCB );
-
参数:
- path: ( String ) 必选 要操作文件相对于当前目录的地址
- flag: ( Flags ) 可选 要操作文件或目录的参数
- succesCB: ( FileEntrySuccessCallback ) 可选 创建或打开文件成功的回调函数
- errorCB: ( FileErrorCallback ) 可选 创建或打开文件失败的回调函数
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
// 创建文件
fs.root.getFile('myTxt/1..txt', {
create: true
}, function(fileEntry) {
console.error('创建文件成功', fileEntry);
},
function(err) {
console.error('创建文件失败', err);
});
},
function(err) {
console.error('请求文件系统失败', err);
});
}
请求成功返回的 fileEntry 里面有个方法 createWriter
- createWriter: 获取文件关联的写文件操作对象FileWriter
-
entry.createWriter( succesCB, errorCB );
-
参数:
- succesCB: ( FileWriterSuccessCallback ) 可选 获取写文件操作对象成功的回调函数
- errorCB: ( FileErrorCallback ) 可选 获取写文件操作对象失败的回调函数
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
// 创建文件
fs.root.getFile('myTxt/1..txt', {
create: true
}, function(fileEntry) {
// 创建写入流
fileEntry.createWriter(function(writer) {
console.error('创建写入流成功', writer);
},
function(err) {
console.error('创建写入流失败', err);
});
},
function(err) {
console.error('创建文件失败', err);
});
},
function(err) {
console.error('请求文件系统失败', err);
});
}
请求成功返回的 writer 里面有个方法 write代码
- write: 向文件中写入数据
-
writer.write( data );
-
参数:
- data : ( String ) 必选 要写入的数据内容
注意: 如果文件中已经存在数据,新写入的数据将覆盖已有数据。
返回的 writer 里面还有个 onwriteend 回调函数,文件写入操作完成时的回调函数
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
// 创建文件
fs.root.getFile('myTxt/1..txt', {
create: true
}, function(fileEntry) {
// 创建写入流
fileEntry.createWriter(function(writer) {
// 设置写入内容
writer.write('123');
// 写入完成回调
writer.onwriteend = function(res) {
console.log('写入文件成功', res.target.fileName);
};
// 写入错误回调
writer.onerror = function(err) {
console.error('写入文件失败', err);
};
},
function(err) {
console.error('创建写入流失败', err);
});
},
function(err) {
console.error('创建文件失败', err);
});
},
function(err) {
console.error('请求文件系统失败', err);
});
返回的 res.target.fileName,就是操作文件的路径
上传文件
利用uniapp提供的上传方法 uni.uploadFile,也可以利用其它的请求方式比如 Ajax 上传文件,根据返回的 res.target.fileName 文件路径,赋值进去就可以了
const pathUrl = res.target.fileName
if (pathUrl!= '') {
uni.uploadFile({
url: '上传地址API',
filePath: pathUrl,
name: "file",
success: (uploadFileRes) => {
console.log(uploadFileRes, '返回的下载地址');
},
complete: () => {
},
});
}
完整代码
Download() {
// 请求文件系统
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
// 创建文件
fs.root.getFile('myTxt/1..txt', {
create: true
}, function(fileEntry) {
// 创建写入流
fileEntry.createWriter(function(writer) {
// 设置写入内容
writer.write('123');
// 写入完成回调
writer.onwriteend = function(res) {
console.log('写入文件成功', res.target.fileName);
const pathUrl = res.target.fileName
if (pathUrl!= '') {
uni.showLoading();
uni.uploadFile({
url: '上传地址API',
filePath: pathUrl,
name: "file",
success: (uploadFileRes) => {
console.log(uploadFileRes, '返回的下载地址');
},
complete: () => {
uni.hideLoading();
},
});
}
};
// 写入错误回调
writer.onerror = function(err) {
console.error('写入文件失败', err);
};
},
function(err) {
console.error('创建写入流失败', err);
});
},
function(err) {
console.error('创建文件失败', err);
});
},
function(err) {
console.error('请求文件系统失败', err);
});
}