今FirebaseとReactでアプリを開発中で、画像をアップロードする部分を作ったのでメモ。
アップロード部分
// uploadPhotoという名前でexport
export const uploadPhoto = async (file) => {
const storageRef = firebase.storage.ref();
const uuid = generateUUID(); // UUIDを作っていますがなんでもOK
const metadata = {
contentType: 'image/png'
};
const fileRef = storageRef.child(`${uuid}.png`);
await fileRef.put(file, metadata);
return uuid; // UUIDを返していますが返さなくてもOK
}
使う部分
class SampleUploader extends Component {
constructor(props) {
super(props);
this.fileInput = React.createRef();
this.state = {
photoData: null,
isPosting: false,
};
}
render() {
// Preview
const photo = this.state.photoData === null ? null :
(
<img src={this.state.photoData} />
);
return (
<form onSubmit={async (e) => {
e.preventDefault();
this.setState({
isPosting: true
});
const photoId = await storage.uploadPhoto(this.fileInput.current.files[0]);
// use photoId
this.setState({
isPosting: false,
photoData: null
})
}}>
<input type="file" accept="image/*" ref={this.fileInput} onChange={(e) => {
const files = e.target.files
if (files.length > 0) {
var file = files[0]
var reader = new FileReader();
reader.onload = (e) => {
this.setState({ photoData: e.target.result });
};
reader.readAsDataURL(file);
} else {
this.setState({ photoData: null });
}
}} />
{photo}
<button type="submit" disabled={this.state.isPosting}>投稿する</button>
</form>
);
}
}
無事FirebaseのCloud Storageに画像をアップロードすることができました。
エンジニアリング Firebase Cloud Storage
関連記事
-
2025/3/28
Macのストレージに空き容量があるのに、実際には空き容量がない状態になっているとき
Mac Storage
-
2024/3/24
try! Swift Tokyo 2024
try! Swift Tokyo 2024の参加メモ
Swift
-
2023/1/31
SwiftUIでTabBarを非表示にする
SwiftUI TabBar
-
2023/1/14
Bootstrap5.3で追加されたダークモードに対応してみました
Bootstrap DarkMode
-
2021/2/17
brew upgradeで Your CLT does not support macOS 11というエラーがでた
homebrew macOS Big Sur
-
2020/12/1
Apple Silicon搭載 MacBook Pro M1で Homebrewとrbenvをインストールする
先日購入したApple Silicon搭載 MacBook Pro M1にこのブログをビルドするためにHomebrewとrbenvをインストールしたのでメモ。
Apple Silicon Homebrew rbenv
-
2020/11/27
Apple Silicon搭載のMacBook Pro M1が危うく文鎮化するところだったので記録
Apple Silicon搭載のMacBook Pro 13インチを仕事用に購入したのですが、クリーンインストールしたところ文鎮化しかけたので記録しておきます。
MacBook Pro Apple Apple Silicon M1
-
2020/6/23
Platform State of the Unionまとめ
Platform State of the Unioまとめ
WWDC2020 Apple アップル iOS macOS watchOS tvOS
-
2020/6/23
WWDC2020キーノートまとめ
WWDC2020 キーノートまとめ
WWDC2020 Apple アップル iOS macOS watchOS tvOS
-
2020/5/31
GitHub Pagesで無料ブログを作成する - Part4 自分のオリジナルのテーマを作る
Jekyllでは既存のテーマを使うこともできるのですが、さらに一歩踏み込んで、自分で既存のテーマをカスタマイズしたり、テーマを作ることもできます。
GitHub Pages ブログ