2017-02-18 39 views
0

ローカルフォルダに格納されているファイル(.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からアップロードしようとしましたが、まだアップロードに失敗します。なぜこれが失敗しているのか?

答えて

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#Firebase-ストレージAPIは、ファイルアップロードのためのストリームを使用しています。ファイルはストリームとしてアップロードする必要があります。私のために働いたのは、メモリストリームを使用することです。

まず私は、ローカルフォルダからファイルを取得した:

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; 

これはそのトリックでした。ファイルがアップロードされました。

関連する問題