2017-02-18 7 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

API-интерфейс Step-Up-Labs C# Firebase-Storage использует поток для загрузки файлов. Файлы должны быть загружены в виде потока. Что для меня работало, это использование потока памяти.

Сначала я извлек файл из локальной папки:

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; 

Это сделало трюк. Файл загружен.

Смежные вопросы