【问题标题】:Is there a way to read or convert object received by request with fs.readFile有没有办法使用 fs.readFile 读取或转换请求接收的对象
【发布时间】:2020-09-12 18:50:49
【问题描述】:

我需要将前端上传的文件发送到我的后端应用程序以获取您的哈希值。我知道获取哈希文件的一种方法是读取您的缓冲区数组(我正在发送一个对象而不是您的缓冲区数组)。

前端代码:

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 变量。

我正在使用 react.js 和 express。节点版本:v12.16.3

【问题讨论】:

    标签: node.js reactjs object hash request


    【解决方案1】:

    问题在于 request.body 是一个请求对象,而 fs.readFile 需要一个文件缓冲区或数据的文件路径

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

    您可以在 fs.readFile 文档中看到。

    你可以使用 npm 包,比如 express-fileupload

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

    例如 在你的 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 });
        }})
      }
    }
    

    【讨论】:

    • 没有成功。根据npmjs.com/package/express-fileupload,我在前端命名为&lt;input name='file, type='file' /&gt;,在后端做了调整,通过app.use(fileUpload());。在请求中,when request.files.file 我得到未定义,当只有request.files 我得到对象。知道我在这里缺少什么
    • 你能粘贴console.log(request.files)的输出吗
    • print request:[object Object]
    • console.log(request.files.file):print request:undefined
    • 你可以试试 console.log(request.files.myFile) 吗??
    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多