C# 将文件从本地文件夹上载到firebase

C# 将文件从本地文件夹上载到firebase,c#,uwp,firebase-storage,C#,Uwp,Firebase Storage,我无法将用户存储在本地文件夹中的文件(.mp3)上载到firebase。 以下是从本地文件夹检索文件的方式: StorageFolder folder = ApplicationData.Current.LocalFolder; var songfolder = await folder.GetFolderAsync("Songs"); StorageFile mp3file = await songfolder.GetFileAsync(mp3fileforupload); Storag

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

StorageFolder folder = ApplicationData.Current.LocalFolder;

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

StorageFile mp3file = await songfolder.GetFileAsync(mp3fileforupload);
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);      

文件无法上载。从文档中,该文件应作为文件流上载。这在从“资源”文件夹上载文件时起作用,但不适用于本地文件夹中的文件。我尝试过从最常用的列表上传,但仍然无法上传。知道为什么会失败吗?

试试这个打开文件

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);
Step Up Labs C#Firebase存储API使用流进行文件上传。文件应作为流上载。对我有效的是使用内存流

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

StorageFolder folder = ApplicationData.Current.LocalFolder;

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

StorageFile mp3file = await songfolder.GetFileAsync(mp3fileforupload);
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;

这就成功了。文件已上载。

它可以工作,但即使它从本地文件夹获取文件,仍然无法上载。我认为这与流媒体有关。