Получение неправильного URL изображения при загрузке изображения с использованием узла js и реагирования js - PullRequest
0 голосов
/ 26 июня 2018

E: oomsack / Images / idea.png, <= этот путь отображается в поле таблицы базы данных, а действительный путь - E: /rooms/back/Images/idea.png.</p>

Код реакции

import React, { Component } from 'react';
import './add_new.css';
import axios from 'axios';
import { Redirect } from 'react-router';
import Header from '../header/Header.js';
import Footer from '../footer/Footer.js';

class Add_new extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      imageURL: '',
      username:'',
      usersurname:''
    };

    this.handleUploadImage = this.handleUploadImage.bind(this);
  }

  handleUploadImage(ev) {
    ev.preventDefault();

    const data = new FormData();
    data.append('file', this.uploadInput.files[0]);
    data.append('filename', this.uploadInput.value);
    data.append('username', this.username.value);
    data.append('usersurname', this.usersurname.value);

    fetch('http://localhost:2000/users', {
      method: 'POST',
      body: data,
    }).then((response) => {
      response.json().then((body) => {
        this.setState({ imageURL: `http://localhost:2000/${body.file}` });
        console.log(response);
      });
    });
  }

  render() {
    return (
      <div>
      <Header />
      <form onSubmit={this.handleUploadImage} style={{ padding:"80px"}}>
        <div>
          <input ref={(ref) => { this.uploadInput = ref; }} type="file" />
        </div>
        <div>
          <input ref={(ref) => { this.username = ref; }} type="text" placeholder="Enter name" />
        </div>
        <br />
        <div>
          <input ref={(ref) => { this.usersurname = ref; }} type="text" placeholder="Enter surname" />
        </div>
        <br />
        <div>
          <button>Upload</button>
        </div>
        <img src={this.state.imageURL} alt="img" />
      </form>
      <Footer />
      </div>
    );
  }
}

export default Add_new;

экспресс-код

const express = require('express');
const path = require('path');
const favicon = require('serve-favicon');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const fileUpload = require('express-fileupload');
const cors = require('cors');
var mysql = require('mysql');
const app = express();

var con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database:"db_database"
});


app.use(logger('dev'));
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(fileUpload());
app.use('/Images', express.static(__dirname + '/Images'));


app.post('/users', (req, res, next) => {
  console.log(req);
  let imageFile = req.files.file;
  let path = `${__dirname}/Images/${imageFile.name}`;
  console.log(path);
  imageFile.mv(path, function(err) {
    if (err) {
      return res.status(500).send(err);
    }
    con.query("INSERT INTO webtable (username,filename,usersurname) VALUES ('"+req.body.username+"','"+path+"','"+req.body.usersurname+"')", function(err, results) {  
      console.log(results); 
      res.json({file: `Images/${req.body.filename}.jpg`});
    });
  });
})

Я получаю это => Images / C: \ fakepath \ image_name.png.jpg во вкладке сети в консоли браузера. Пока мой исходный адрес E: \ rooms \ back / Images / image_name.png

1 Ответ

0 голосов
/ 26 июня 2018

Вы уже используете правильное имя поля в своем коде. Какой ожидаемый результат вы хотите? Вы можете отправить следующее

res.json({file: `/Images/${imageFile.name}`});

или

res.json({file: path});

Обновление:

используйте `вместо '

    con.query("INSERT INTO webtable (username,filename,usersurname) VALUES ('"+req.body.username+"',`"+path+"`,'"+req.body.usersurname+"')", function(err, results) {  
      console.log(results); 
      res.json({file: `Images/${req.body.filename}.jpg`});
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...