Загрузите файл с ftp и расшифруйте его с помощью jsftp и crypto в nodejs - PullRequest
0 голосов
/ 18 января 2020

Я на самом деле делаю проект, где у меня есть ftp-сервер, я хочу иметь возможность получить файл с моего компьютера, зашифровать его и поместить на ftp-сервер. А также получите файл с ftp-сервера, расшифруйте его и поместите на мой компьютер.

На первом этапе он работал успешно:

router.post('/uploadftpobj', function(req, res) {
    let status = {
          status: 400,
          message: ''
    };
    let token = req.fields.idToken;
    let buffer = req.files.file;
    let filename = buffer.name.replace(/[^\w\-\.]/gi, '');

    ini.admin.auth().verifyIdToken(token).then(async (decodedToken) => {
      if (!filename.endsWith(".obj")) {
        status.status = 400;
        status.message = "File must be a .obj !";
        res.send(status);
        return;
      }

      let data = fs.readFileSync(buffer._writeStream.path);
      let cipher = crypto.createCipher('aes-256-cbc',KeyCrypto);
      let crypted = Buffer.concat([cipher.update(data),cipher.final()]);
      ftp_orthese_socket.put(crypted, "/obj_files/" + filename , err => {
              if (err) {
                  status.status = 400;
                  status.message = "File cannot be uploaded !";
                  res.send(status);
              } else {
                  status.status = 200;
                  status.message = "File has been uploaded !";
                  res.send(status);
              }
          })
      })
});

Я получил зашифрованный файл на своем ftp сервер и все ок. Но на этапе загрузки у меня ничего не получилось. Вот мой код:

router.post('/downloadftpobj', function(req, res) {
  let status = {
    status: 200,
    message: 'The content of the file has been downloaded to the requested path !',
  };
  let token = req.fields.idToken;
  let user_path = req.fields.path;

  ini.admin.auth().verifyIdToken(token).then(async (decodedToken) => {
    if (!user_path.endsWith(".obj")) {
      status.status = 400;
      status.message = "File must be an .obj !";
      res.send(status);
      return;
    }
    let decipher = crypto.createDecipher('aes-256-cbc',KeyCrypto);
    var str = "";
    ftp_orthese_socket.get("/obj_files/" + user_path, (err, socket) => {
        if (err) {
            console.error(err);
            return;
        }
        socket.on("data", d => {
            str += d.toString();
        });
        console.log(str);
    });
  })
});

На данный момент я пытался поместить данные моего файла в str, но когда я console.log (str), он пуст. Я действительно не вижу никакого решения, если у вас есть какие-либо советы о чем-либо еще, я слушаю! :)

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...