import React, { useState, Component } from "react";
import { storage } from "../Firebase";
function UploadFile() {
const [image, setImage] = useState(null);
const [url, setUrl] = useState("");
const [progress, setProgress] = useState(0);
const handleChange = e => {
if (e.target.files[0]) {
setImage(e.target.files[0]);
}
};
const handleUpload = () => {
const uploadTask = storage.ref(`images/${image.name}`).put(image);
uploadTask.on(
"state_changed",
snapshot => {
const progress = Math.round(
(snapshot.bytesTransferred / snapshot.totalBytes) * 100
);
setProgress(progress);
},
error => {
console.log(error);
},
() => {
storage
.ref("images")
.child(image.name)
.getDownloadURL()
.then(url => {
setUrl(url);
});
}
);
};
console.log("image: ", image);
return (
<div>
<progress value={progress} max="100" />
<br />
<br />
<input type="file" onChange={handleChange} />
<button onClick={handleUpload}>Upload</button>
<br />
{url}
<br />
<img src={url || "http://via.placeholder.com/300"} alt="firebase-image" />
</div>
);
}
export default UploadFile;
import React, { Component } from 'react';
import firebase from '../Firebase';
import UploadFile from '../components/UploadFile';
class AddArticle extends Component {
constructor() {
super();
this.ref = firebase.firestore().collection('articles');
this.state = {
title: '',
content: ''
};
}
onChange = (e) => {
const state = this.state
state[e.target.name] = e.target.value;
this.setState(state);
}
onSubmit = (e) => {
e.preventDefault();
const { title, content } = this.state;
this.ref.add({
title,
content
}).then((docRef) => {
this.setState({
title: '',
content: ''
});
this.props.history.push("/")
})
.catch((error) => {
console.error("Error adding document: ", error);
});
}
render() {
const { title, content } = this.state;
return (
<div className="container">
<br></br><br></br><br></br>
<div className="panel panel-default">
<div className="panel-heading">
<h3 className="panel-title text-center">
Create a new article
</h3>
</div>
<br></br><br></br>
<div className="panel-body">
<form onSubmit={this.onSubmit}>
<div className="form-group">
<label for="title">Title:</label>
<input type="text" className="form-control" name="title" value={title} onChange={this.onChange} placeholder="Title" />
</div>
<div className="form-group">
<label for="content">Content:</label>
<textArea className="form-control" name="content" onChange={this.onChange} placeholder="Content" cols="80" rows="20">{content}</textArea>
</div>
<UploadFile />
<button type="submit" className="btn btn-success">Submit</button>
</form>
</div>
</div>
</div>
);
}
}
export default AddArticle;
本文向大家介绍我们如何将SAP Business One与Ubercart连接起来?,包括了我们如何将SAP Business One与Ubercart连接起来?的使用技巧和注意事项,需要的朋友参考一下 可以使用SAP DI服务器完成此操作,因为它正在使用基于XML的格式来导入数据,并且更适合于外部数据交换。 您可以参考以下文档以获取有关SAP BI DI Server的更多详细信息。 https
我尝试将构建作业从Hudson迁移到Jenkins(2.32.1)。Maven构建工作正常,但是SonarQube的Maven构建步骤不起作用。我使用Jenkins SonarQube插件2.5版。 我的SonarQube配置(下面添加SonarQube扫描仪): 我的构建环境(以下是使用环境变量配置SonarQube扫描器): 日志显示,Jenkins使用了错误的数据库URL(H2而不是Post
本文向大家介绍我们如何将MySQL DISTINCT子句与WHERE和LIMIT子句一起使用?,包括了我们如何将MySQL DISTINCT子句与WHERE和LIMIT子句一起使用?的使用技巧和注意事项,需要的朋友参考一下 通过在MySQL查询中将WHERE子句与DISTINCT子句一起使用,我们将基于一个条件,即MySQL返回结果集的唯一行。通过在MySQL查询中使用LIMIT子句和DISTIN
例如:当我们使用dimens文件夹作为文本大小值时,我们使用dimen(small)来更改小布局(屏幕)的文本大小。所以我想对图像做同样的思考,我想把hdpi图像大小(exp)与适当的布局联系起来-(大小:小或大等) 我想问题可能出在这里,因为它包含了一些关于标题和全屏的行,这是启动代码:
我正在创建一个基本的GUI框架。框架有10个单选按钮和一个提交按钮。用户选择一个选项(JRadioButtons)并单击Submit(JButton)按钮。单击“提交”按钮时,用户选择的选项将显示在另一个框架上。 我希望提交按钮能识别用户选择的JRadioButton。我把我的代码放在这里供参考。 提前谢谢。