概要
type='file'
指定したinputから画像を選択し、formがsubmitされたときにFirebaseのstorageにその画像をアップロードします。
その際、複数画像のアップロードにも対応します。
storageのルール
ルールは以下のようにします。
バケットの/form-uploaded
配下にのみアップロードを許可し、MAX20MBの画像ファイルを許可する設定です。
1 2 3 4 5 6 7 8 9 10
| rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /form-uploaded/{id} { allow write : if request.resource.size < 20 * 1024 * 1024 && request.resource.contentType.matches('image/.*'); } } }
|
htmlとjs
htmlとjsは以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| <html> <head></head> <body> <form> <input type='file' accept='image/*' multiple='multiple' name='imgs[]'> <button type='submit'>送信</button> </form>
<script src='https://www.gstatic.com/firebasejs/7.5.0/firebase-app.js'></script> <script src='https://www.gstatic.com/firebasejs/7.5.0/firebase-storage.js'></script> <script>
var firebaseConfig = { apiKey: 'xxxxx', projectId: 'yyyyy', storageBucket: 'zzzzzz', } firebase.initializeApp(firebaseConfig);
var form = document.querySelector('form'); form.addEventListener('submit', function (e) { e.preventDefault(); var imgs = form.querySelector('input'); var uploads = []; for (var file of imgs.files) { var storageRef = firebase.storage().ref('form-uploaded/' + file.name); uploads.push(storageRef.put(file)); } Promise.all(uploads).then(function () { console.log('アップロード完了'); }); }); </script>
</body> </html>
|