javascript - react js 处理文件上传

标签 javascript reactjs

我是 React js 的新手。我想用react js异步上传图片 假设我有这段代码

var FormBox = React.createClass({
  getInitialState: function () {
    return {
      photo: []
    }
  },
  pressButton: function () {
    var data = new FormData();
    data.append("photo", this.state.photo);
    // is this the correct way to get file data?
  },
  getPhoto: function (e) {
    this.setState({
      photo: e.target.files[0]
    })
  },
  render: function () {
    return (
      <form action='.' enctype="multipart/form-data">
        <input type='file'  onChange={this.getPhoto}/>
        <button onClick={this.pressButton}> Get it </button>
      </form>
    )
  }
})

ReactDOM.render(<FormBox />, document.getElementById('root'))

任何答案将不胜感激!

最佳答案

你可以使用FileReader

var FormBox = React.createClass({
          getInitialState: function () {
            return {
              file: '',
              imagePreviewUrl: ''
            }
          },
          pressButton: function () {
            e.preventDefault();
          // TODO: do something with -> this.state.file
          console.log('handle uploading-', this.state.file);
          },
          getPhoto: function (e) {
            e.preventDefault();

            let reader = new FileReader();
            let file = e.target.files[0];

            reader.onloadend = () => {
              this.setState({
                file: file,
                imagePreviewUrl: reader.result
              });
            }

            reader.readAsDataURL(file);
            
          },
          render: function () {
            let {imagePreviewUrl} = this.state;
            let imagePreview = null;
            if (imagePreviewUrl) {
              imagePreview = (<img src={imagePreviewUrl} />);
            } else {
              imagePreview = (<div className="previewText">Please select an Image for Preview</div>);
            }
            return (
              <div>
              <form action='.' enctype="multipart/form-data">
                <input type='file'  onChange={this.getPhoto}/>
                <button onClick={this.pressButton}> Get it </button>
              </form>
              <div className="imgPreview">
                {imagePreview}
              </div>
              </div>
            )
          }
        })
        
        ReactDOM.render(<FormBox />, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react-dom.min.js"></script>
<div id="root"></div>

关于javascript - react js 处理文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39695275/

相关文章:

javascript - 如何将其格式化为 RESTful API 调用?

reactjs - 在构造函数或 componentWillMount 中设置初始 React 组件状态?

reactjs - Jest 中的 API 模拟后 useEffect 中的无限循环

javascript - 在多维数组 Javascript 中使用映射

javascript - 通过内联 onClick 运行 jQuery 函数并使用函数变量/引用

javascript - 内容出现在 div 之外

javascript - 是/否按钮而不是 confirm() 对话框中的 OK/Cancel?

reactjs - 尝试从 componentWillMount 中异步调用的返回值设置状态时,未定义文档

javascript - 为什么向下滚动导航栏不改变颜色?

Javascript/JSP随机排序两个相等的字符串数组