2017-02-18 6 views
0

Ich habe Probleme beim Hochladen von Dateien (.mp3), die im lokalen Ordner vom Benutzer an Firebase gespeichert wurden. Dies ist, wie eine Datei aus lokalen Ordnern abgerufen wird:Hochladen einer Datei aus dem lokalen Ordner in firebase

StorageFolder folder = ApplicationData.Current.LocalFolder; 

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

StorageFile mp3file = await songfolder.GetFileAsync(mp3fileforupload); 

Und das ist, wie ich eine Stream-Datei der Datei und Upload erstellen:

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

Die Datei nicht hochgeladen werden. Aus der Dokumentation Step-up-labs sollte die Datei als Stream einer Datei hochgeladen werden. Dies funktionierte beim Hochladen von Dateien aus dem Ordner "Assets", funktioniert jedoch nicht mit Dateien aus dem lokalen Ordner. Ich habe versucht, von MostRecentlyUsedList hochzuladen, aber es kann immer noch nicht hochgeladen werden. Irgendeine Idee, warum das scheitert?

Antwort

0

diese stattdessen versuchen, die Datei für Datei-Uploads

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

Es funktioniert, aber immer noch nicht hochzuladen, obwohl es die Datei aus dem lokalen Ordner ruft. Ich denke, es hat etwas mit dem Streaming zu tun. – Elisha

0

Das Step-Up-Labs C# Firebase-Speicher-API verwendet Stream zu öffnen. Dateien sollten als Stream hochgeladen werden. Was für mich funktioniert hat, ist ein Memory Stream.

Zuerst abgerufen ich die Datei aus lokalen Ordner:

StorageFolder folder = ApplicationData.Current.LocalFolder; 

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

StorageFile mp3file = await songfolder.GetFileAsync(mp3fileforupload); 

Dann las ich die Bytes der Datei ein Datareader verwendet:

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); 
    } 
} 

Dann habe ich ein Memorystream für den Upload:

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; 

Das hat den Trick gemacht. Die hochgeladene Datei

Verwandte Themen