Файл ZIP NodeJS поврежден после загрузки - PullRequest
0 голосов
/ 02 апреля 2019

Я запущен и Swagger-tools как проект nodejs в бэк-энде. Для базы данных я использую Sequilize. Я использую стороннюю библиотеку AdmZip для генерации zip-файла из пути к файлу и отправки в качестве ответа клиенту. Проблема в том, что когда я загружаю zip-файл из браузера, он говорит, что zip-файл поврежден

вот мой код:

module.exports.getFilesFromGroupZip = (req, res) => {

const options = swagger.convertParams(req, 'getFilesFromGroupZip');
var zip = new AdmZip("");

Groups.findOne({
    where: {
        id: options.id
    },
    include: {
        model: Files,
        through: {
            attributes: []
        }
    }
}).then(result => {
    result.files.forEach(file => {
        zip.addLocalFile(file.path);
    })
    response.sendZip(zip.toBuffer(), res, 200, 'getFilesFromGroupZip')

}).catch(err => {
    console.log(err)
    response.sendError(err, res, 404, 'getFilesFromGroupZip')
})
}

module.exports.sendZip = (result, response, statusCode, source) => {  

  response.statusCode = statusCode;
  response.setHeader('Content-Type', 'application/zip');  

console.log(`Returning ${response.statusCode} for ${source}`);

  response.end(result);
};

swagger.json:

   "/groups/{id}/zip.zip" : {
  "parameters": [
    {
      "name": "id",
      "in": "path",
      "required": true,
      "type": "string",
      "description": "groupID"
    }
  ],
  "get" : {
    "summary" : "Downloads zip file with files from selected group.",
    "description" : "Returns dataset zip.",
    "operationId" : "getFilesFromGroupZip",
    "produces": [  
      "application/gzip",
      "application/zip"
    ],
    "parameters" : [ ],
    "responses" : {
      "200" : {
        "description" : "Downloads zip file with files from selected group.",
        "schema" : {
          "type" : "file"
        }
      },
      "400" : {
        "$ref" : "#/responses/400"
      },
      "401" : {
        "$ref" : "#/responses/401"
      },
      "403" : {
        "$ref" : "#/responses/403"
      },
      "404" : {
        "$ref" : "#/responses/404"
      },
      "500" : {
        "$ref" : "#/responses/500"
      }
    },
    "x-swagger-router-controller" : "groupsController"
  }
},
...