【问题标题】:uploading a file from local folder to firebase将文件从本地文件夹上传到 Firebase
【发布时间】:2017-07-08 00:33:44
【问题描述】:

我无法将用户存储在本地文件夹中的文件 (.mp3) 上传到 firebase。 这是从本地文件夹中检索文件的方式:

StorageFolder folder = ApplicationData.Current.LocalFolder;

var songfolder = await folder.GetFolderAsync("Songs");

StorageFile mp3file = await songfolder.GetFileAsync(mp3fileforupload);

这就是我创建文件的流文件并上传的方式:

var stream = File.Open(mp3file.Path, FileMode.Open);

var task = new FirebaseStorage("-my-bucket-.appspot.com")
                       .Child("songs")
                       .Child(new_song_id)
                       .PutAsync(stream);

task.Progress.ProgressChanged += (s, f) => uploadProgress(f.Percentage);

var downloadurl = await task;
Debug.WriteLine("DOWNLOAD_URL " + downloadurl);      

文件上传失败。从Step-up-labs 文档中,该文件应作为文件流上传。这在从 Assets 文件夹上传文件时有效,但不适用于本地文件夹中的文件。我尝试从 MostRecentlyUsedList 上传,但仍然无法上传。知道为什么会失败吗?

【问题讨论】:

    标签: c# uwp firebase-storage


    【解决方案1】:

    试试这个来打开文件

    Windows.Storage.StorageFolder storageFolder =
        Windows.Storage.ApplicationData.Current.LocalFolder;
    Windows.Storage.StorageFile sampleFile =
        await storageFolder.GetFileAsync(mp3file.Path);
    var stream = await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
    

    【讨论】:

    • 它可以工作,但即使它从本地文件夹中获取文件,仍然无法上传。我认为这与流媒体有关。
    【解决方案2】:

    Step-Up-Labs C# Firebase-Storage API 使用 Stream 进行文件上传。文件应作为流上传。对我有用的是使用内存流。

    首先我从本地文件夹中检索文件:

    StorageFolder folder = ApplicationData.Current.LocalFolder;
    
    var songfolder = await folder.GetFolderAsync("Songs");
    
    StorageFile mp3file = await songfolder.GetFileAsync(mp3fileforupload);
    

    然后我使用 DataReader 读取文件的字节:

    byte[] fileBytes = null;
    using (IRandomAccessStreamWithContentType stream = await mp3file.OpenReadAsync())
    {
      fileBytes = new byte[stream.Size];
      using (DataReader reader = new DataReader(stream))
        {
          await reader.LoadAsync((uint)stream.Size);
          reader.ReadBytes(fileBytes);
        }
    }
    

    然后我使用 MemoryStream 进行上传:

    Stream stream = new MemoryStream(fileBytes);
    
    var task = new FirebaseStorage("-my-bucket-.appspot.com")
               .Child("songs")
               .Child(new_song_id)
               .PutAsync(stream);
    
    task.Progress.ProgressChanged += (s, f) => uploadProgress(f.Percentage);
    
    var downloadurl = await task;
    

    成功了。文件已上传。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 2011-09-08
      • 2011-08-05
      • 2021-09-12
      • 2018-11-11
      • 2011-10-08
      相关资源
      最近更新 更多