From fbda18401780a32bc700c2f4f3ec4300f6550edc Mon Sep 17 00:00:00 2001 From: Razvan Cristian Lung Date: Thu, 11 Jul 2019 03:36:27 +0300 Subject: [PATCH 1/5] add formatting for java class --- .../firebase/storage/FirebaseStoragePlugin.java | 10 ++++++++-- packages/firebase_storage/example/pubspec.yaml | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java b/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java index 37f8202356f8..fa338ae647a3 100755 --- a/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java +++ b/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java @@ -6,7 +6,9 @@ import android.net.Uri; import android.util.SparseArray; + import androidx.annotation.NonNull; + import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; @@ -20,16 +22,20 @@ import com.google.firebase.storage.StorageMetadata; import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.UploadTask; + import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.PluginRegistry.Registrar; + import java.io.File; import java.util.HashMap; import java.util.Map; -/** FirebaseStoragePlugin */ +/** + * FirebaseStoragePlugin + */ public class FirebaseStoragePlugin implements MethodCallHandler { private FirebaseStorage firebaseStorage; private final MethodChannel channel; @@ -49,7 +55,7 @@ private FirebaseStoragePlugin(MethodChannel channel, Registrar registrar) { } @Override - public void onMethodCall(MethodCall call, final Result result) { + public void onMethodCall(@NonNull MethodCall call, @NonNull final Result result) { String app = call.argument("app"); String storageBucket = call.argument("bucket"); if (app == null && storageBucket == null) { diff --git a/packages/firebase_storage/example/pubspec.yaml b/packages/firebase_storage/example/pubspec.yaml index c52f55f550b4..321265020fde 100755 --- a/packages/firebase_storage/example/pubspec.yaml +++ b/packages/firebase_storage/example/pubspec.yaml @@ -8,7 +8,7 @@ dependencies: firebase_storage: path: ../ firebase_core: ^0.4.0 - uuid: "^1.0.0" + uuid: ^1.0.0 http: ^0.12.0 dev_dependencies: From fb2d7d3138743f3af3623ac2b1fd43e9a597e8f5 Mon Sep 17 00:00:00 2001 From: Razvan Cristian Lung Date: Thu, 11 Jul 2019 04:00:35 +0300 Subject: [PATCH 2/5] drop leading / --- packages/firebase_storage/lib/src/storage_reference.dart | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/firebase_storage/lib/src/storage_reference.dart b/packages/firebase_storage/lib/src/storage_reference.dart index ea14de9da8c0..71a31ff98464 100644 --- a/packages/firebase_storage/lib/src/storage_reference.dart +++ b/packages/firebase_storage/lib/src/storage_reference.dart @@ -88,12 +88,18 @@ class StorageReference { /// Returns the full path to this object, not including the Google Cloud /// Storage bucket. Future getPath() async { - return await FirebaseStorage.channel + final String path = await FirebaseStorage.channel .invokeMethod("StorageReference#getPath", { 'app': _firebaseStorage.app?.name, 'bucket': _firebaseStorage.storageBucket, 'path': _pathComponents.join("/"), }); + + if (path.startsWith('/')) { + return path.substring(1); + } else { + return path; + } } /// Returns the short name of this object. From 57465b146e8b67d080a3cb7c7311298867e7dd16 Mon Sep 17 00:00:00 2001 From: Razvan Cristian Lung Date: Thu, 11 Jul 2019 06:28:55 +0300 Subject: [PATCH 3/5] add mime type for Android file uploads when none is specified --- .../storage/FirebaseStoragePlugin.java | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java b/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java index fa338ae647a3..baddde1c1bc5 100755 --- a/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java +++ b/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java @@ -6,9 +6,8 @@ import android.net.Uri; import android.util.SparseArray; - +import android.webkit.MimeTypeMap; import androidx.annotation.NonNull; - import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; @@ -22,20 +21,16 @@ import com.google.firebase.storage.StorageMetadata; import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.UploadTask; - import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.PluginRegistry.Registrar; - import java.io.File; import java.util.HashMap; import java.util.Map; -/** - * FirebaseStoragePlugin - */ +/** FirebaseStoragePlugin */ public class FirebaseStoragePlugin implements MethodCallHandler { private FirebaseStorage firebaseStorage; private final MethodChannel channel; @@ -264,19 +259,18 @@ public void onFailure(@NonNull Exception e) { private void putFile(MethodCall call, Result result) { String filename = call.argument("filename"); String path = call.argument("path"); - Map metadata = call.argument("metadata"); File file = new File(filename); + final Uri fileUri = Uri.fromFile(file); + Map metadata = call.argument("metadata"); + metadata = ensureMimeType(metadata, fileUri); + StorageReference ref = firebaseStorage.getReference().child(path); - UploadTask uploadTask; - if (metadata == null) { - uploadTask = ref.putFile(Uri.fromFile(file)); - } else { - uploadTask = ref.putFile(Uri.fromFile(file), buildMetadataFromMap(metadata)); - } + final UploadTask uploadTask = ref.putFile(fileUri, buildMetadataFromMap(metadata)); final int handle = addUploadListeners(uploadTask); result.success(handle); } + private void putData(MethodCall call, Result result) { byte[] bytes = call.argument("data"); String path = call.argument("path"); @@ -400,7 +394,7 @@ private void cancelUploadTask(MethodCall call, final Result result) { } } - private void resumeUploadTask(MethodCall call, final Result result) { + private void resumeUploadTask(MethodCall call,@NonNull final Result result) { int handle = call.argument("handle"); UploadTask task = uploadTasks.get(handle); if (task != null) { @@ -493,4 +487,25 @@ private Map buildMapFromTaskSnapshot( } return map; } + + private Map ensureMimeType(Map metadata, Uri file) { + if (metadata == null) { + metadata = new HashMap<>(); + } + + if (metadata.get("contentType") == null) { + metadata.put("contentType", getMimeType(file)); + } + + return metadata; + } + + private static String getMimeType(Uri file) { + String type = null; + String extension = MimeTypeMap.getFileExtensionFromUrl(file.toString()); + if (extension != null) { + type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); + } + return type; + } } From 89c6c196bd068199ab25718abc51080e5dc62458 Mon Sep 17 00:00:00 2001 From: Razvan Cristian Lung Date: Thu, 11 Jul 2019 06:41:23 +0300 Subject: [PATCH 4/5] fix formatting issue --- .../plugins/firebase/storage/FirebaseStoragePlugin.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java b/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java index baddde1c1bc5..406956da7608 100755 --- a/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java +++ b/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java @@ -270,7 +270,6 @@ private void putFile(MethodCall call, Result result) { result.success(handle); } - private void putData(MethodCall call, Result result) { byte[] bytes = call.argument("data"); String path = call.argument("path"); @@ -394,7 +393,7 @@ private void cancelUploadTask(MethodCall call, final Result result) { } } - private void resumeUploadTask(MethodCall call,@NonNull final Result result) { + private void resumeUploadTask(MethodCall call, @NonNull final Result result) { int handle = call.argument("handle"); UploadTask task = uploadTasks.get(handle); if (task != null) { From fad3262bc47a48c42b6ffad1b8400397823ab6ba Mon Sep 17 00:00:00 2001 From: Razvan Cristian Lung Date: Thu, 11 Jul 2019 08:50:57 +0300 Subject: [PATCH 5/5] Bump version to 3.0.3 --- packages/firebase_storage/CHANGELOG.md | 5 +++++ packages/firebase_storage/pubspec.yaml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/firebase_storage/CHANGELOG.md b/packages/firebase_storage/CHANGELOG.md index 3b1dfe8e5a85..a9a946249e2b 100644 --- a/packages/firebase_storage/CHANGELOG.md +++ b/packages/firebase_storage/CHANGELOG.md @@ -1,3 +1,8 @@ +## 3.0.3 + +* Fix inconsistency of `getPath`, on Android the path returned started with a `/` but on iOS it did not +* Fix content-type auto-detection on Android + ## 3.0.2 * Automatically use version from pubspec.yaml when reporting usage to Firebase. diff --git a/packages/firebase_storage/pubspec.yaml b/packages/firebase_storage/pubspec.yaml index c73b88b7f0cf..6569799b60de 100755 --- a/packages/firebase_storage/pubspec.yaml +++ b/packages/firebase_storage/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for Firebase Cloud Storage, a powerful, simple, and cost-effective object storage service for Android and iOS. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_storage -version: 3.0.2 +version: 3.0.3 flutter: plugin: