首先,我使用ffmpeg(在Windows的Converter Server上)将视频分成几帧,然后创建一个档案,我需要将该档案转移到另一台服务器(Generator服务器,Linux)上,在该服务器中,带有视频和/的档案或图像,框架和data.json文件应解压缩,存档的内容应进一步使用。
要解压缩,我提取了zip库(基于yauzl),并从util模块中使用了promisify。
问题是,当我将图像发送到Converter进行处理时,一切都会正常进行;但是,当我发送视频时,出现此错误-“未找到中央目录记录签名的结尾”。
在我看来,该问题与异步或事件循环有关。
...
const fs = require('fs-extra')
const path = require('path')
cosnt util = require('util')
const extractZip = util.promisify(require('extract-zip'))
...
...
/**
* Factory that creates a project based on the archive.
* @param {string} archive Path to the source archive
* @returns {Promise.<Project>}
*/
static async create (archive) {
const dir = fs.mkdtempSync(path.join(this.baseDir, '/'))
await extractZip(archive, { dir })
const data = await fs.readJson(path.join(dir, 'data.json'))
return new this(data, dir)
}
...
/* Tried to do this w/ chaining promises:
static async create (archive) {
const dir = fs.mkdtempSync(path.join(this.baseDir, '/'))
await extractZip(archive, { dir })
.then( async () => {
const data = await fs.readJson(path.join(dir, 'data.json'))
return data
})
.then( async (data) => {
return new this(data, dir)
})
}
*/
答案 0 :(得分:0)
我解决了这个问题。事实证明,我一直在异步地从服务器下载大型存档,因此更正这一刻,一切正常进行。
Select
结论:面临类似的问题-您应该遍历整个数据传输链以及其中涉及的函数/调用堆栈。