我需要在前端将上传的文件发送到后端应用程序以获取您的哈希。我知道一种获取哈希文件的方法是读取缓冲区数组(我正在发送对象而不是缓冲区数组)。
前端代码:
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
问题是request.body是一个请求对象,而对于fs.readFile则需要文件缓冲区或数据的文件路径
fs.readFile(request.body, "utf8", function(err,data){
您可以在fs.readFile文档中看到。
您可以使用express-fileupload之类的npm软件包
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 });
}})
}
}