我需要将图片上传到网站,并在上传后将其显示在网页上,并显示文件名的标题在形象下。我搜索了很多关于上传和显示在同一页面上的很多教程,但我认为我只理解了从服务器请求信息并将其显示回来的内容。上传图片并在页面上显示该图片(Node.js,React,js,Express.js)
我正在编写我的web应用程序在node + react中,并使用express和multer作为文件IO。这里是我的代码:
import React from 'react';
import ReactDOM from 'react-dom';
import Dropzone from 'react-dropzone-component';
import fs from 'fs';
import express from 'express';
import mutler from 'mutler';
var app = express();
var storage;
var upload;
export default class Form extends React.Component {
constructor (props) {
super(props);
storage = multer.diskStorage({
//file destination
destination: function (req, file, callback) {
callback(null, '/uploads/');
},
//set the filename
filename: function (req, file, callback) {
callback(null, file.originalname);
this.state = {
name: file.originalname
};
}
});
upload = multer({ storage : storage}).single('userImage');
app.use('/uploads/', express.static(__dirname + '/uploads/'));
}
handleImageUpload() {
app.post('/', function (req, res) {
fs.readFile(req.files.userImage.path, function(err, data) {
console.log('error with ' + data);
});
upload(req, res, function (err) {
if (err) {
return res.end("Error uploading file.");
}
res.writeFile("/uploads/" + origName, new Buffer(req.body.photo, "base64"), function(err) {
console.log("error writing image");
});
res.redirect('/');
});
});
}
getName() {
return this.state.name;
}
render() {
return (<div>
<form action="/" method="post" enctype="multipart/form-data">
<input type="image" name="userImage"/>
<input type="submit" name="submit" value="submit" onClick={this.handleImageUpload.bind(this)}/>
</form>
</div>
);
}
}
我试过以下多个教程(这就是为什么悬浮窗是进口的),但我实在不明白这一点的是我想做的事情。
我想如果我在构造函数中将文件名保存为状态,那么我可以稍后获取它并将其显示在另一个文件中,该文件只是将文件的url归属到较高的反应文件中的图像源。
我的问题是:我哪里出错了?按照我的理由,这应该可以工作,但我是新来的IO节点,并且我看过的教程中的许多人似乎都是常识,并不是单击我。预先感谢您的帮助!
非常感谢!这确实有帮助,并使整个过程更简单。我在这里看到,你已经对成功代码发表了评论,那会是一个怎样的例子?我可以告诉你在代码中进一步发布POST,现在我已经将“成功”这个词打印到控制台,作为我在代码中的指示器。 再一次,我很抱歉,如果这是另一个真正愚蠢的问题,但如何在没有采取行动的情况下发布网址?我认为这是最终对我没有意义的。 – DottoraQN
成功代码示例? 我使用的是流量架构。它可以帮助我广播我已经成功发布图像,以便更新我的反应组件状态。 post url如何在没有任何操作的情况下工作? 没有得到你的问题,请尝试更多地解释它。 有没有这样的事情作为一个愚蠢的问题:) – user3770494
从我的理解POST是如何工作的,url需要与html表单上的操作相同。我试图将我的网址设置为'/',因为我不想在任何地方重定向,并冒着搞砸图像显示的风险,但该网站不喜欢它。我错过了什么? – DottoraQN