如何解决错误-找不到中央目录记录签名的结尾?

时间:2019-05-27 13:12:39

标签: javascript node.js koa

首先,我使用ffmpeg(在Windows的Converter Server上)将视频分成几帧,然后创建一个档案,我需要将该档案转移到另一台服务器(Generator服务器,Linux)上,在该服务器中,带有视频和/的档案或图像,框架和data.json文件应解压缩,存档的内容应进一步使用。

要解压缩,我提取了zip库(基于yauzl),并从util模块中使用了promisify。

问题是,当我将图像发送到Converter进行处理时,一切都会正常进行;但是,当我发送视频时,出现此错误-“未找到中央目录记录签名的结尾”。

在我看来,该问题与异步或事件循环有关。

  • 我尝试不使用promisify,但是我遇到了以下问题-当我需要使用存档中的数据时,此存档尚不存在(“文件夹不存在”);
  • 尝试了更多用于解压缩adamzip,unzip,解压缩,node-zip的库;
  • 我试图做出一连串的承诺;
...
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)
   })
}

*/


1 个答案:

答案 0 :(得分:0)

我解决了这个问题。事实证明,我一直在异步地从服务器下载大型存档,因此更正这一刻,一切正常进行。

Select

结论:面临类似的问题-您应该遍历整个数据传输链以及其中涉及的函数/调用堆栈。