2017-03-28 20 views
0

問題が発生しているコードはこちらです。Firebaseからアレイに画像をダウンロードする際に問題が発生する

共有:

// Firebase services 
var database: FIRDatabase! 
var storage: FIRStorage! 
... 
// Initialize Database, Auth, Storage 
database = FIRDatabase.database() 
storage = FIRStorage.storage() 
... 
// Initialize an array for your pictures 
var picArray: [UIImage]() 

アップロード:

let fileData = NSData() // get data... 
let storageRef = storage.reference().child("myFiles/myFile") 
storageRef.putData(fileData).observeStatus(.Success) { (snapshot) in 
// When the image has successfully uploaded, we get it's download URL 
let downloadURL = snapshot.metadata?.downloadURL()?.absoluteString 
// Write the download URL to the Realtime Database 
let dbRef = database.reference().child("myFiles/myFile") 
dbRef.setValue(downloadURL) 

}

ダウンロード:私は上記のコードを使用しようとしてきた

let dbRef = database.reference().child("myFiles") 
dbRef.observeEventType(.ChildAdded, withBlock: { (snapshot) in 
// Get download URL from snapshot 
let downloadURL = snapshot.value() as! String 
// Create a storage reference from the URL 
let storageRef = storage.referenceFromURL(downloadURL) 
// Download the data, assuming a max size of 1MB (you can change this as necessary) 
storageRef.dataWithMaxSize(1 * 1024 * 1024) { (data, error) -> Void in 
// Create a UIImage, add it to the array 
let pic = UIImage(data: data) 
picArray.append(pic) 
}) 
}) 

は@でもともと投稿しましたマイク・マクドナルドFirebase DBから一連の画像を取得して追加します。私は正常に上記を使用してイメージをアップロードすることができますが、私の人生のために、私はダウンロードするイメージを取得することはできませんし、イメージ配列に追加します。

エラーが表示されません。単に「ダウンロード」コードが実行されていない(コンソールでもこれを確認しようとしました)だけです。行のカップルはスウィフト3のために異なっているが、私はについて不明だ唯一のものである:

let storageRef = storage.referenceFromURL(downloadURL) 

この上、または/ APPENDを作成する方法上の任意の提案今

let storageRef = self.storage.reference(forURL: downloadURL) 

ですFirebaseでchildadded observerを使用している一連の画像が評価されます。ありがとう!

答えて

0

data(withMaxSize:completion)observe(_:with:)に更新して、すでに言及したようにreference(forURL:)を使用してください。このためにコードを更新する必要があります。

let dbRef = database.reference().child("myFiles") 
dbRef.observe(.childAdded, with: { (snaphot) in 
    // Get download URL from snapshot 
    let downloadURL = snapshot.value() as! String 
    // Create a storage reference from the URL 
    let storageRef = storage.reference(forURL: downloadURL) 
    // Download the data, assuming a max size of 1MB (you can change this as necessary) 
    storageRef.data(withMaxSize: 1 * 1024 * 1024) { (data, error) in 
    let pic = UIImage(data: data!) 
    picArray.append(pic) 
    } 
}) 
+0

ありがとうございました。私はこれらの変更を既に行いました。まだ完全に実行するためにダウンロードコードを取得することに問題があります。 – Oprimus

+1

私は、このコードで確実に動作するダウンロードを参照してください。したがって、あなたが自分の使い方について基本的に述べたようにコードを使用します。多分あなた自身のコードの多くの部分を追加して、あなたが達成しようとしていることについてもっと詳しく説明してください。問題は他のどこかにあるようだ。 – ronatory

+0

あなたは正しい。私は答えを掲示した。ありがとう! – Oprimus

0

私の場合、これに対する答えがわかりました。私は画像をデータとしてアップロードしていませんでした。そして、データとしてのダウンロードは決して起こっていませんでした。エラーを引き起こさず、実行されません。ここで私が行った変更は、次のとおりです。それは完全に今取り組んでいる

let fileData = (UIImagePNGRepresentation(self.imagefile.image!)! as NSData?)! 

let fileData = NSData() 

に変更します!

関連する問題