Saya dapat mengunggah gambar ke Firebase Storage tetapi saya kesulitan mengunduhnya. Ini kode saya untuk mengunduh gambar:

let storage = FIRStorage.storage()
let localURL : NSURL! = NSURL(string: "file:///Documents/co.png")
// i also tried let localURL : NSURL! = NSURL.fileURLWithPath("file:///Documents/co.png")

func download() {
    let storageRef = storage.referenceForURL("gs://project-5547819591027666607.appspot.com")
    let imageRef = storageRef.child("co.png")

    let downloadTask = imageRef.writeToFile(localURL) { (URL, error) -> Void in
        if (error != nil) {
            print(error?.localizedDescription)
        }
        else {
            self.imageView.image = UIImage(data: data!)
        }
    }
}

Saya menerima - Opsional("Terjadi kesalahan yang tidak diketahui, harap periksa respons server.")

Juga setelah saya mengunduhnya. Bagaimana cara melihat gambar itu?

Untuk mencoba melihat apakah gambar telah diunduh, saya membuat UIImageView dan menyetel outletnya di storyboard yang disebut "imageView" lalu menyetel gambar yang diunduh ke UIImageView.

self.imageView.image = UIImage(data: data!)
3
Timmy Sorensen 8 Juni 2016, 08:36
Url Anda tampaknya salah untuk file tersebut. coba fileURLWithString pastikan Anda dapat memuat gambar dari url itu terlebih dahulu di aplikasi lalu lanjutkan untuk mengunggah
 – 
Shubhank
8 Juni 2016, 08:40
Saya mencoba mengunduh
 – 
Timmy Sorensen
8 Juni 2016, 08:41
Lihat bagian tentang mengunduh url file di sini. Unduh url dan gunakan saja url itu di Alamofire atau NSURLSession sendiri. itu akan lebih mudah dilakukan karena Alamofire akan melakukan hal-hal seperti caching dan hal yang lebih baik.
 – 
Shubhank
8 Juni 2016, 08:45
Bisakah Anda menunjukkan kepada saya beberapa kode untuk mendukung saran Anda?
 – 
Timmy Sorensen
8 Juni 2016, 08:57
Bisakah Anda memposting pesan kesalahan lengkap (seperti yang Anda lakukan di bawah)? Ada beberapa kesalahan izin sistem file di mana Anda sebenarnya tidak memiliki izin untuk menulis ke direktori yang sesuai, anehnya.
 – 
Mike McDonald
8 Juni 2016, 09:50

1 menjawab

Jawaban Terbaik

Mencoba

Pertama dapatkan referensi ke gambar yang ingin Anda unduh menggunakan

let reference = FIRStorage.storage().reference("uploads/sample.jpg")

Jika Anda tahu ukuran gambarnya kecil - seperti maksimal 1-2 mb. unduh gambar di memori

reference.dataWithMaxSize(1 * 1024 * 1024) { (data, error) -> Void in
  if (error != nil) {
    print(error)
  } else {
     let myImage: UIImage! = UIImage(data: data!)    
  }
}

Ini akan menjadi cara tercepat dan termudah untuk mendownload langsung dari Firebase Storage.

Namun ada beberapa kasus ketika Anda menginginkan blok kemajuan dan hal-hal tertentu lainnya seperti caching. Dalam kasus seperti itu, Anda dapat menggunakan pihak ketiga seperti Alamofire untuk mengunduh gambar dari url yang Anda dapatkan dari Firebase Storage.
Untuk mendapatkan url lakukan sesuatu seperti ini

reference.downloadURLWithCompletion { (URL, error) -> Void in
  if (error != nil) {
    // Handle any errors
  } else {
     print(URL)
     // download image using NSURLSession or Alamofire
  }
}
6
Shubhank 8 Juni 2016, 09:23
Itu sepertinya berhasil karena sekarang saya mendapatkan 'opsional (Domain Kesalahan=FIRStorageErrorDomain Code=-13021 "Pengguna tidak memiliki izin untuk mengakses gs://project-*******.appspot.com/(null). " UserInfo={ResponseBody={ "error": { "code": 403, "message": "Kredensial pengembang diperlukan." } }, ResponseErrorCode=403, NSLocalizedDescription=Pengguna tidak memiliki izin untuk mengakses gs://project- 5547819591027666607.appspot.com/(null).})'
 – 
Timmy Sorensen
8 Juni 2016, 09:37
 – 
Shubhank
8 Juni 2016, 09:40
Mengubah Aturan Keamanan Anda atau menggunakan Auth akan menyelesaikan masalah, meskipun /(null) bermasalah karena sepertinya Anda tidak benar-benar mengunduh apa pun (apakah Anda mencoba mengunduh sesuatu di referensi root?).
 – 
Mike McDonald
8 Juni 2016, 09:51
Kesalahan saya, saya menyalin di baris kodenya .reference("uploads/sample.jpg") alih-alih referensi saya. Sekarang sedang mengunduh gambar.
 – 
Timmy Sorensen
8 Juni 2016, 09:58
1
Seperti jika saya memiliki folder latar belakang, mengunduh 10 gambar ke dalam tampilan tabel agar pengguna dapat memilih satu. Apakah saya harus mengajukan permintaan untuk setiap gambar atau dapatkah saya meminta foldernya?
 – 
Timmy Sorensen
8 Juni 2016, 10:06