android Unity:如何在没有FileContentProvider的情况下将zip文件上传到firebase存储?

nkhmeac6  于 2023-02-14  发布在  Android
关注(0)|答案(1)|浏览(118)

我有一个从Unity-Android应用程序上传zip文件到firebase的最小工作示例。该示例在Unity-Editor模式下运行应用程序时工作正常。
然而,当构建Android,我得到以下错误:

System.AggregateException: One or more errors occured. (No content provider: /storage/emulated/0/Android/data/com.MyCompany.MyApp/cache/myFile.zip)
Firesbase.Sotrage.StorageException: No content provider

当我在谷歌上搜索这个问题时,我得到了关于how to edit a "Custom AndroidManifest.xml" and adding a FileProvider class using native Android code (by compiling a library project using Android Studio etc.的说明)。
对于我的问题来说,这看起来完全是大材小用。难道不应该有一个好的和简单的方法来共享文件,由我的应用创建,存储在应用自己的文件夹与firebase?

toe95027

toe950271#

所以我找到了一个变通办法:而不是尝试将文件直接发送到firebase,我可以

  • 首先将文件作为字节数组读入RAM
  • 然后将字节数组发送到firebase

下面是一些代码:

FirebaseStorage storage;
        StorageReference storageRef;

        storage = FirebaseStorage.DefaultInstance;
        storageRef = storage.RootReference;

        byte[] fileData = File.ReadAllBytes(localFilePath);
        StorageReference storageDataRef = storageRef.Child(firebaseFilename);
        storageDataRef.PutBytesAsync(fileData)
            .ContinueWith((Task<StorageMetadata> task) => {
                if (task.IsFaulted || task.IsCanceled) {
                    Debug.Log(task.Exception.ToString());
                    // Uh-oh, an error occurred!
                }
                else {
                    // Metadata contains file metadata such as size, content-type, and md5hash.
                    StorageMetadata metadata = task.Result;
                    string md5Hash = metadata.Md5Hash;
                    Debug.Log("Finished uploading...");
                    Debug.Log("md5 hash = " + md5Hash);
                }
            });

现在我没有得到任何“FileContentProvider”错误了。不知道为什么我必须这样做虽然...

相关问题