Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
上传图像并在页面上显示该图像(Node.js、React、js、Express.js)_Node.js_Image_Reactjs_Express_Upload - Fatal编程技术网

上传图像并在页面上显示该图像(Node.js、React、js、Express.js)

上传图像并在页面上显示该图像(Node.js、React、js、Express.js),node.js,image,reactjs,express,upload,Node.js,Image,Reactjs,Express,Upload,我需要上传一个图像到一个网站,并显示在页面后,它与图像下的文件名标题上传它。我到处搜索,找到了很多关于上传和显示在同一页面上的教程,但我想我只是对从服务器请求信息然后再显示回来的理解有了一个分解 我正在node+react中编写我的web应用程序,并使用express和multer作为文件IO。这是我的密码: import React from 'react'; import ReactDOM from 'react-dom'; import Dropzone from 'react-dropz

我需要上传一个图像到一个网站,并显示在页面后,它与图像下的文件名标题上传它。我到处搜索,找到了很多关于上传和显示在同一页面上的教程,但我想我只是对从服务器请求信息然后再显示回来的理解有了一个分解

我正在node+react中编写我的web应用程序,并使用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>

    );
}

}
从“React”导入React;
从“react dom”导入react dom;
从“react Dropzone component”导入Dropzone;
从“fs”导入fs;
从“快递”进口快递;
从“mutler”导入mutler;
var-app=express();
var存储;
var上传;
导出默认类表单扩展React.Component{
建造师(道具){
超级(道具);
存储=multer.diskStorage({
//文件目的地
目标:函数(请求、文件、回调){
回调(null,“/uploads/”);
},
//设置文件名
文件名:函数(请求、文件、回调){
回调(null,file.originalname);
此.state={
名称:file.originalname
};
}
});
upload=multer({storage:storage}).single('userImage');
app.use('/uploads/',express.static(uu dirname+'/uploads/);
}
handleImageUpload(){
app.post(“/”,函数(请求,res){
fs.readFile(req.files.userImage.path,函数(err,数据){
console.log(“+数据错误”);
});
上传(请求、恢复、功能(错误){
如果(错误){
返回res.end(“上传文件时出错”);
}
res.writeFile(“/uploads/”+origName,新缓冲区(req.body.photo,“base64”),函数(err){
日志(“错误写入图像”);
});
res.redirect('/');
});
});
}
getName(){
返回this.state.name;
}
渲染(){
返回(
);
}
}
我尝试过多个教程(这就是为什么要导入Dropzone),但我就是不明白我想做什么

我想,如果我将文件名保存到构造函数中,那么我可以稍后获取它并在另一个文件中显示它,这只是将文件的url归因于更高级别文件中的图像源


我的问题是:我哪里做错了?根据我的推理,这应该是可行的,但我对node文件IO还不熟悉,在我读过的教程中,很多人似乎都很熟悉,但我并不喜欢。提前感谢您的帮助

使用以下模块选择图像。

然后,您可以使用xhr请求将图像上载到服务器。下面是示例代码

var xhr  = new XMLHttpRequest();
xhr.onload = function (e) {
//your success code goes here
}
var formData = new FormData();
xhr.open("POST", url, true);
formData.append('file', fileData);
xhr.send(formData);

我假设您正在实现以下要求

  • 允许用户选择图像
  • 上载所选图像
  • 向用户显示所选图像
  • 我的解决方案有什么帮助

  • 允许用户选择图像
  • 向用户显示他/她选择的内容
  • 通过可用回调将图像上载到服务器(在教程中提到)
  • 显示成功或失败

  • 如果你需要任何帮助,一定要告诉我。:)

    非常感谢你!这真的很有帮助,并且使整个过程变得更加简单。我在这里看到,您已经为成功代码添加了注释,这方面的示例是什么?我可以告诉你,你正在代码中做进一步的发布,现在我刚刚把“成功”这个词打印到控制台上,作为我在代码中所处位置的指示器。再一次,如果这是另一个非常愚蠢的问题,我很抱歉,但是在没有操作的情况下,post-url是如何工作的呢?我认为这是我最终没有意义的。成功代码的例子?我使用的是flux架构。这有助于我广播我已成功发布图像,以便更新我的react组件状态。在没有操作的情况下,post url是如何工作的?没有理解你的问题,请多解释一下。没有愚蠢的问题:)根据我对POST工作原理的理解,url需要与html表单上的操作相同。我尝试将我的url设置为“/”,因为我不想重定向到任何地方,也不想冒着破坏图像显示的风险,但网站不喜欢它。我遗漏了什么?没有。您可以使用xhr请求将任何数据发布到任何url。