Есть ли способ прочитать или преобразовать объект, полученный по запросу с помощью fs.readFile - PullRequest
0 голосов
/ 26 мая 2020

Мне нужно отправить загруженный файл из внешнего интерфейса в мое внутреннее приложение, чтобы получить ваш ha sh. Я знаю, что один из способов получить файл ha sh - это чтение вашего буферного массива (я отправляю объект вместо вашего буферного массива).

внешний код:

const [document, setDocument] = useState('');

async function onFileUpload(e) { 
// Create an object of formData 
const formData = new FormData(); 

formData.append( 
  "myFile", 
  document,
); 

// Request made to the backend api 
// Send formData object 
try {
  const response = await api.post('/uploadFile', formData); 

  console.log('response' + response);
} catch (err) {
  console.log('err' + err);
  // alert(`error`);
}

};

<input 
  placeholder="Informe um arquivo"
  type="file"
  name="file"
  onChange={e => setDocument(e.target.files[0])}
 />

 <button type="submit" onClick={onFileUpload}>Upload</button>

код серверной части:

import cryptoJs from 'crypto-js';
import fs from 'fs';

module.exports = {
  create(request, response) {

    console.log('dm:' + request.body)

    fs.readFile(request.body, "utf8", function(err,data){
      if(err) {
        console.error("Could not open file: %s", err);
        return response.json(err);
      }else{
        var finalHash = cryptoJs.SHA256(data);
        //upToIPFS(data);
        console.log('hash: ' + finalHash)
        return response.json({ finalHash });
    }})
  }
}

Когда файл отправляется в серверную часть, я получаю это ошибка:

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string or an instance of Buffer or URL. Received an instance of Object

Я знаю, что полученный запрос является объектом. Есть ли способ преобразовать или прочитать объектный запрос? или мне нужно изменить внешний код для отправки правильного запроса?

Если попытаться request.body.document вместо request.body, я получу undefined переменную.

Я использую реакцию . js и express. версия узла: v12.16.3

1 Ответ

1 голос
/ 26 мая 2020

Проблема в том, что request.body является объектом запроса, тогда как для fs.readFile требуется буфер файла или путь к файлу данных

fs.readFile(request.body, "utf8", function(err,data){

enter image description here

, как вы могли видеть в документации fs.readFile.

Вы можете использовать npm пакеты, такие как express -fileupload

https://www.npmjs.com/package/express-fileupload

например, в ur index. js

const express = require('express');
const fileUpload = require('express-fileupload');
const app = express();

// default options
app.use(fileUpload());


import cryptoJs from 'crypto-js';
import fs from 'fs';

module.exports = {
  create(request, response) {

    console.log('dm:' + request.body)

    fs.readFile(request.files.myFile.data, "utf8", function(err,data){
      if(err) {
        console.error("Could not open file: %s", err);
        return response.json(err);
      }else{
        var finalHash = cryptoJs.SHA256(data);
        //upToIPFS(data);
        console.log('hash: ' + finalHash)
        return response.json({ finalHash });
    }})
  }
}
...