当前位置: 首页 > 知识库问答 >
问题:

使用reactjs上传图像,不将图像路径保存在数据库中

康元凯
2023-03-14

我在后端使用Rails API,在前端使用ReactJS。我也使用载波在后端处理我的图像。我试图上传我的图像并将其发送到后端。使用简单的超文本标记语言上传器在前端捕获图像文件。

这是我的uploader.jsx

import React from 'react'
import axios, { post } from 'axios';
import { PORT } from '../constant.js';


class PrescriptionNew extends React.Component {

  constructor(props) {
    super(props);
    this.state ={
      file: null
    }
    this.onFormSubmit = this.onFormSubmit.bind(this)
    this.onChange = this.onChange.bind(this)
    this.fileUpload = this.fileUpload.bind(this)
  }

  onFormSubmit(e){
    e.preventDefault() // Stop form submit
    this.fileUpload(this.state.file).then(response => {
      console.log('response', response.data)
    })
  }

  onChange(e) {
    this.setState({file: e.target.files[0]})
  }

  fileUpload(file){ 
    const url = `${PORT}/prescriptions`;
    var FormData = require('form-data');
    const formData = new FormData();
    formData.append('file',file)
    const config = {
      headers: {
        'content-type': 'multipart/form-data'
      }
    }
    return post(url,formData, config)
  }
  
  render() {
    if (this.state.file !== null) {
      console.log('this.file', this.state.file.name)
    }
    return (
      <form onSubmit={this.onFormSubmit}>
        <h1>File Upload</h1>
        <input type="file" onChange={this.onChange} />
        <button type="submit">Upload</button>
      </form>
   )
  }
}

export default PrescriptionNew;

以上代码是此解决方案的精确副本。我使用formData和axios将数据推送到后端。但数据在数据库中存储为“nil”值。安慰log(formData)给出一个空哈希。

我在后端的控制器代码是

def create
  @prescription = Prescription.new(prescription_params)
  @prescription.user = current_user
  unless @prescription.save
    render json: { status: 200, errors: @prescription.errors } and return
  else
    render :show
  end
end

我还参考了此门户中给出的许多解决方案。但是,我仍然无法研究代码中的错误。

共有1个答案

商柏
2023-03-14

简单的解决方案是填充FormData。返回空FormData将在数据库中存储“nil”值。

完美的音乐是

class PrescriptionNew extends Component {

  upload_image(){
    var element = document.getElementById("image-form")
    var formData =  new FormData(element);
    const url = `${PORT}/prescriptions`
    fetch(url,{
      method: "POST",
      body: formData
    })
    .then(response => response.json)
  }

  after_submit(event){
    event.preventDefault();
  }

  render(){
    return(
      <div>
        <h3 className="index-title">Upload Your Prescription</h3>
        <form onSubmit={event => this.after_submit(event)} id="image-form" encType='multipart/form-data'>
          <input type="file" name="image_path"/>
          <button onClick={() => this.upload_image()}>Upload</button>
        </form>  
      </div>
    )
  }
}

export default PrescriptionNew; 
 类似资料:
  • 问题内容: 我必须使用JavaScript创建一个表单,用户将上载JPG文件并与其他信息(例如名称,电子邮件等)一起提交。当用户单击提交时,表单中的所有信息将被加载到值对象中。对于图像文件,我将其设置为。 所以假设: 我还设置了一个servlet来处理提交,但是我不确定如何开始。上传如何进行?用户提交时,如何获取图像信息?这是屏幕截图:http : //imageshack.us/f/32/776

  • 问题内容: 我的客户在php + mysql中创建了一个脚本,该脚本将图像直接保存在数据库中,并且每个图像都有这样的url:www.example.com/image.php?id=421 您认为这是一个非常错误的解决方案?我应该重建所有站点吗? 每天大约有1000次访问,数据库中大约有600张图像。 问题答案: 图像文件是文件,除非有充分的理由将它们存储在数据库中,否则它们应属于文件系统,在文件

  • 你好,我正在制作员工目录。在这种形式下,我想上传员工的照片,当我试图存储图像时,我遇到了错误,比如Portlet暂时不可用,如果我成功删除图像上传逻辑,然后在数据库中删除其他数据存储。请帮助我如何在数据库中存储图像路径。我已在/webapps中创建图像文件夹。我想将我的所有图像存储在此文件夹中,并将图像路径存储到数据库中。请告诉我如何存储图像路径,以及存储图像路径后如何在其他页面中显示图像。 在这

  • 问题内容: 我想将图像的下载URL放入Firebase数据库中。我可以将图像上传到存储中,但无法弄清楚如何将URL与其余的“帖子”一起放入数据库。 问题答案: 像这样组织您和func: 接下来,只需连接并保存到您的节点即可。 您也可以查看我有关上传数据并将URL保存到数据库的答案 希望能帮助到你

  • 问题内容: 我正在尝试上传图片以及添加细节,例如;标题,描述和文件路径到数据库表中。 我正在使用以下代码,但未将任何数据添加到数据库中; (session.php include包含数据库连接。) 表单代码; 我想知道是否有人可以告诉我可能出了什么问题? 谢谢你。 问题答案: 由于存在几个问题,此代码无法正常工作。 首先,您应在检查上传时重命名html字段之一或更改字段名称: 或者 第二,此脚本不

  • 问题内容: 我正在学习Swift,并且正在创建一个使用个人照片的应用程序,并将另一个放在上面。我现在有一个hacky解决方案,可以创建该区域的屏幕截图并保存。我需要在Swift中执行此操作 但是,这是可行的,现在不再可行。但是,这也不是最佳解决方案。 那么,伙计们,我该如何将个人图像中的图像作为叠加图像保存到相机胶卷中? 帮助将不胜感激!谢谢! 问题答案: 我建议阅读此线程。您所有的答案都在那里。