报errMsg: "saveFile:fail parameter `tempFilePath`. Expected String with value "[object Blob]", got Blob "
时间: 2023-12-08 10:06:24 浏览: 249
MySQL中报错:Can’t find file: ‘./mysql/plugin.frm’的解决方法
5星 · 资源好评率100%
非常抱歉给您带来的困扰。根据您提供的错误信息,看起来是因为 `uni.saveFile` 方法的 `tempFilePath` 参数需要传入一个字符串类型的文件路径,而不是 Blob 对象。
为了解决这个问题,我们可以将 Blob 对象转换为临时文件路径,然后再调用 `uni.saveFile` 方法保存分片文件。
请尝试以下修改:
```javascript
async getReealPath(e) {
return new Promise((resolve, reject) => {
const self = this;
const chunks = [];
plus.io.resolveLocalFileSystemURL(e, async function(entry) {
entry.file(function(file) {
const blockSize = 1024 * 1024; // 每块大小为1MB
const fileSize = file.size; // 获取视频文件大小
const blockCount = Math.ceil(fileSize / blockSize); // 计算需要分割的块数
// 创建临时文件夹用于保存分片文件
const tempDirPath = plus.io.convertLocalFileSystemURL('_doc/temp');
plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) {
fs.root.getDirectory('temp', { create: true }, function(dirEntry) {
// 分割视频文件并逐块保存
for (let i = 0; i < blockCount; i++) {
const start = i * blockSize;
const end = Math.min(start + blockSize, fileSize);
const chunkData = file.slice(start, end); // 分割得到当前块的数据
const chunkBlob = new Blob([chunkData]); // 将分割的数据转换为Blob对象
// 生成分片文件名并保存
const chunkFileName = 'video_chunk_' + (i + 1) + '.mp4';
const chunkFilePath = tempDirPath + '/' + chunkFileName;
plus.io.writeFile({
filename: chunkFilePath,
data: chunkBlob,
success: async function() {
try {
const tempFilePath = await self.blobToTempFilePath(chunkBlob);
chunks.push(tempFilePath);
// 在这里可以对当前块的数据进行上传操作
console.log('上传进度', chunkBlob);
// 如果已经是最后一块分片,则开始上传
if (i === blockCount - 1) {
self.uploadNextChunk(chunks, 0);
}
} catch (error) {
console.log('Failed to convert blob to temp file path:', error);
}
},
fail: function(error) {
console.log('Failed to save chunk:', error);
}
});
}
});
});
});
});
});
},
blobToTempFilePath(blob) {
return new Promise((resolve, reject) => {
const tempFilePath = plus.io.convertLocalFileSystemURL('_doc/temp/' + Date.now() + '.tmp');
plus.io.resolveLocalFileSystemURL(tempFilePath, function(entry) {
entry.createWriter(function(writer) {
writer.onwriteend = function() {
resolve(tempFilePath);
};
writer.onerror = function(error) {
reject(error);
};
writer.write(blob);
}, function(error) {
reject(error);
});
}, function(error) {
reject(error);
});
});
}
```
在上述代码中,我们添加了一个名为 `blobToTempFilePath` 的辅助函数,用于将 Blob 对象转换为临时文件路径。在分片文件保存成功后,我们调用 `blobToTempFilePath` 函数将分片文件的 Blob 对象转换为临时文件路径,并将该临时文件路径添加到 `chunks` 数组中。
请尝试修改代码,并确保在保存分片文件成功后将 Blob 对象转换为临时文件路径。如果问题仍然存在,请提供更多关于前端发送请求和后端接收参数的代码,以便更好地帮助您解决问题。
阅读全文