2017-02-18 63 views
0

我在將用戶保存在本地文件夾中的文件(.mp3)上傳到firebase時遇到問題。 這是怎樣一個文件從本地文件夾檢索:將本地文件夾中的文件上傳到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文檔中,文件應該作爲文件流上傳。從「資產」文件夾上傳文件時這起作用,但不適用於本地文件夾中的文件。我嘗試從MostRecentlyUsedList上傳,但仍無法上傳。任何想法爲什麼這是失敗?

回答

0

試試這個打開的文件

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); 
+0

它的工作原理,但即使它從本地文件夾中獲取文件仍然無法上傳。我認爲這與流媒體有關。 – Elisha

0

升壓-Labs的C#火力地堡 - 存儲API使用流文件上傳。文件應該作爲Stream上傳。對我有效的是使用Memory Stream。

首先,我檢索從本地文件夾中的文件:

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:

StorageFolder folder = ApplicationData.Current.LocalFolder; 

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

StorageFile mp3file = await songfolder.GetFileAsync(mp3fileforupload); 

然後我使用DataReader讀取文件的字節

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; 

這樣做。文件已上傳。

相關問題