Как освободить память после экспресс-ответа?

У меня есть маршрут в экспресс, который получает массив изображений, изменения размера и загрузки на FTP-сервер. перед запросом этого маршрута сервер использует 100 МБ памяти, во время запроса он достигает 300 МБ, а после ответа остается 300 МБ. Как я освобождаю эту память, использованную в маршруте. Что я могу делать не так? Я использую node-ftp в качестве ftp-клиента и sharpjs для изменения размера изображений.

маршрут:

app.post('/uploadFotos',upload.array('imgs'),(request,response)=> {
request.setTimeout(500000);
let contrato = request.body.contrato;
let arquivos = request.files;
ftp.listarArquivos(contrato,"",(list)=>{
  if(list.arquivos.length>0){
    ftp.uploadArquivos(arquivos,contrato,"original",(err, message)=>{
      if(!err){
        response.send(message)
      }else{
        console.log(message);
        response.send(message);
      }
    });
  }else{
    ftp.criarPasta(contrato,(err,res)=>{
      if(!err){
          ftp.uploadArquivos(arquivos,contrato,"original",(err, message)=>{
            delete arquivos;
            if(!err){
              response.send(message)
            }else{
              response.send("erro no upload dos arquivos");
            }
          });
      }else{
        response.send("erro ao criar pasta");
      }
    })
  }
});

})

функции, которые делают обработку:

uploadArquivos:async function(arquivos,pasta,subpasta,callback){
  if(pasta)pasta = "/"+pasta;
  let numArquivos = arquivos.length;

  let numArquivosSuccess =0;
  //percorre todos os arquivos
  for(let i = 0;i<numArquivos;i++){
    let arquivo = arquivos[i];
    //define um caminho para cada tamanho de imagem
    let caminhoComArquivoOriginal = config.caminhoOculto+config.caminhoPadrao+pasta+"/original/"+arquivo.originalname;
    let caminhoComArquivo200 = config.caminhoOculto+config.caminhoPadrao+pasta+"/200/"+arquivo.originalname;
    let caminhoComArquivo800 = config.caminhoOculto+config.caminhoPadrao+pasta+"/800/"+arquivo.originalname;


    let bufferOriginal = arquivo.buffer;
    let buffer800 = await sharp(bufferOriginal).resize(800).toBuffer();
    let buffer200 = await sharp(buffer800).resize(200).toBuffer();

    let x = await uploadArquivo(bufferOriginal,caminhoComArquivoOriginal);
    let x1 = await uploadArquivo(buffer800,caminhoComArquivo800);
    let x2 = await uploadArquivo(buffer200,caminhoComArquivo200);

    delete bufferOriginal;
    delete buffer800;
    delete buffer200
    delete x;
    delete x1;
    delete x2;

  }
  delete arquivos;
  callback("","imagens processadas");

}

function uploadArquivo(buffer,caminho){
return new Promise(
function(resolve, reject) {
  c = new Client();
  c.on('ready', function() {
    c.put(buffer,caminho,(err)=>{
      c.end();
      delete c;
      if(err)reject(err);
      resolve("Imagem processada");
    });
  });
  c.connect(conection);
});
}

0 ответов

Другие вопросы по тегам