Google cam kết thúc đẩy bình đẳng chủng tộc đối với cộng đồng đen. Xem cách.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Tải tập tin trên iOS

Cloud Storage cho phép các nhà phát triển để nhanh chóng và dễ dàng tải về tập tin từ một Google Cloud Storage xô cung cấp và quản lý bởi căn cứ hỏa lực.

Tạo một tham khảo

Để tải về một tập tin, đầu tiên tạo ra một tài liệu tham khảo Cloud Storage đến tập tin bạn muốn tải về.

Bạn có thể tạo một tài liệu tham khảo bằng cách thêm đường dẫn con vào thư mục gốc lưu trữ, hoặc bạn có thể tạo ra một tài liệu tham khảo từ một hiện gs:// hoặc https:// URL tham khảo một đối tượng trong Cloud Storage.

Nhanh

// Create a reference with an initial file path and name
let pathReference = storage.reference(withPath: "images/stars.jpg")

// Create a reference from a Google Cloud Storage URI
let gsReference = storage.reference(forURL: "gs://<your-firebase-storage-bucket>/images/stars.jpg")

// Create a reference from an HTTPS URL
// Note that in the URL, characters are URL escaped!
let httpsReference = storage.reference(forURL: "https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg")

Objective-C

// Create a reference with an initial file path and name
FIRStorageReference *pathReference = [storage referenceWithPath:@"images/stars.jpg"];

// Create a reference from a Google Cloud Storage URI
FIRStorageReference *gsReference = [storage referenceForURL:@"gs://<your-firebase-storage-bucket>/images/stars.jpg"];

// Create a reference from an HTTPS URL
// Note that in the URL, characters are URL escaped!
FIRStorageReference *httpsReference = [storage referenceForURL:@"https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg"];
  

Tải tập tin

Một khi bạn có một tài liệu tham khảo, bạn có thể tải tập tin từ Cloud Storage theo ba cách:

  1. Tải về để NSData trong bộ nhớ
  2. Tải về một NSURL đại diện cho một tập tin trên thiết bị
  3. Tạo một NSURL đại diện cho các tập tin trực tuyến

Tải về trong ký ức

Tải tập tin về một NSData đối tượng trong bộ nhớ bằng cách sử dụng dataWithMaxSize:completion: phương pháp. Đây là cách dễ nhất để nhanh chóng tải về một tập tin, nhưng nó phải tải toàn bộ nội dung của tập tin của bạn vào bộ nhớ. Nếu bạn yêu cầu một tập tin lớn hơn bộ nhớ có sẵn của ứng dụng, ứng dụng của bạn sẽ sụp đổ. Để bảo vệ chống lại các vấn đề bộ nhớ, hãy chắc chắn để thiết lập kích thước tối đa cho một cái gì đó bạn biết ứng dụng của bạn có thể xử lý, hoặc sử dụng một phương pháp download.

Nhanh

// Create a reference to the file you want to download
let islandRef = storageRef.child("images/island.jpg")

// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
islandRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
  if let error = error {
    // Uh-oh, an error occurred!
  } else {
    // Data for "images/island.jpg" is returned
    let image = UIImage(data: data!)
  }
}
    

Objective-C

// Create a reference to the file you want to download
FIRStorageReference *islandRef = [storageRef child:@"images/island.jpg"];

// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
[islandRef dataWithMaxSize:1 * 1024 * 1024 completion:^(NSData *data, NSError *error){
  if (error != nil) {
    // Uh-oh, an error occurred!
  } else {
    // Data for "images/island.jpg" is returned
    UIImage *islandImage = [UIImage imageWithData:data];
  }
}];
    

Tải vào một tập tin địa phương

Các writeToFile:completion: phương pháp tải một tập tin trực tiếp đến một thiết bị cục bộ. Sử dụng điều này nếu người dùng của bạn muốn có quyền truy cập vào các tập tin trong khi ẩn hoặc để chia sẻ trong một ứng dụng khác nhau. writeToFile:completion: lợi nhuận một FIRStorageDownloadTask mà bạn có thể sử dụng để quản lý tải về của bạn và theo dõi tình trạng của tải lên.

Nhanh

// Create a reference to the file you want to download
let islandRef = storageRef.child("images/island.jpg")

// Create local filesystem URL
let localURL = URL(string: "path/to/image")!

// Download to the local filesystem
let downloadTask = islandRef.write(toFile: localURL) { url, error in
  if let error = error {
    // Uh-oh, an error occurred!
  } else {
    // Local file URL for "images/island.jpg" is returned
  }
}
    

Objective-C

// Create a reference to the file you want to download
FIRStorageReference *islandRef = [storageRef child:@"images/island.jpg"];

// Create local filesystem URL
NSURL *localURL = [NSURL URLWithString:@"path/to/image"];

// Download to the local filesystem
FIRStorageDownloadTask *downloadTask = [islandRef writeToFile:localURL completion:^(NSURL *URL, NSError *error){
  if (error != nil) {
    // Uh-oh, an error occurred!
  } else {
    // Local file URL for "images/island.jpg" is returned
  }
}];
    

Nếu bạn muốn chủ động quản lý tải về, bạn có thể sử dụng writeToFile: phương pháp và quan sát công việc tải về, hơn là sử dụng bộ xử lý hoàn thành. Xem manage để biết thêm thông tin.

Tạo URL tải

Nếu bạn đã có cơ sở hạ tầng tải dựa trên URL, hoặc chỉ muốn có một URL để chia sẻ, bạn có thể nhận được URL tải về cho một tập tin bằng cách gọi downloadURLWithCompletion: phương pháp trên một tài liệu tham khảo lưu trữ.

Nhanh

// Create a reference to the file you want to download
let starsRef = storageRef.child("images/stars.jpg")

// Fetch the download URL
starsRef.downloadURL { url, error in
  if let error = error {
    // Handle any errors
  } else {
    // Get the download URL for 'images/stars.jpg'
  }
}
    

Objective-C

// Create a reference to the file you want to download
FIRStorageReference *starsRef = [storageRef child:@"images/stars.jpg"];

// Fetch the download URL
[starsRef downloadURLWithCompletion:^(NSURL *URL, NSError *error){
  if (error != nil) {
    // Handle any errors
  } else {
    // Get the download URL for 'images/stars.jpg'
  }
}];
    

Hình ảnh tải với FirebaseUI

FirebaseUI cung cấp đơn giản, tùy chỉnh, và cam kết ràng buộc điện thoại di động có nguồn gốc sản xuất sẵn sàng để loại bỏ mã boilerplate và thúc đẩy Google thực hành tốt nhất. Sử dụng FirebaseUI bạn có thể nhanh chóng và dễ dàng tải về, bộ nhớ cache, và hiển thị hình ảnh từ Cloud Storage sử dụng tích hợp của chúng tôi với SDWebImage .

Đầu tiên, thêm FirebaseUI để bạn Podfile :

pod 'FirebaseUI/Storage'

Sau đó, bạn có thể tải hình ảnh trực tiếp từ lưu trữ vào một UIImageView :

Nhanh

// Reference to an image file in Firebase Storage
let reference = storageRef.child("images/stars.jpg")

// UIImageView in your ViewController
let imageView: UIImageView = self.imageView

// Placeholder image
let placeholderImage = UIImage(named: "placeholder.jpg")

// Load the image using SDWebImage
imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)
    

Objective-C

// Reference to an image file in Firebase Storage
FIRStorageReference *reference = [storageRef child:@"images/stars.jpg"];

// UIImageView in your ViewController
UIImageView *imageView = self.imageView;

// Placeholder image
UIImage *placeholderImage;

// Load the image using SDWebImage
[imageView sd_setImageWithStorageReference:reference placeholderImage:placeholderImage];
    

manage

Bên cạnh đó khi bắt đầu tải về, bạn có thể tạm dừng, tiếp tục và hủy tải bằng cách sử dụng pause , resume , và cancel phương pháp. Những phương pháp nâng pause , resume , và cancel sự kiện mà bạn có thể quan sát.

Nhanh

// Start downloading a file
let downloadTask = storageRef.child("images/mountains.jpg").write(toFile: localFile)

// Pause the download
downloadTask.pause()

// Resume the download
downloadTask.resume()

// Cancel the download
downloadTask.cancel()
    

Objective-C

// Start downloading a file
FIRStorageDownloadTask *downloadTask = [[storageRef child:@"images/mountains.jpg"] writeToFile:localFile];

// Pause the download
[downloadTask pause];

// Resume the download
[downloadTask resume];

// Cancel the download
[downloadTask cancel];
    

Monitor Tải Progress

Bạn có thể đính kèm các quan sát viên đến FIRStorageDownloadTask s để theo dõi sự tiến bộ của tải. Thêm một lợi nhuận quan sát một FIRStorageHandle có thể được sử dụng để loại bỏ các quan sát viên.

Nhanh

// Add a progress observer to a download task
let observer = downloadTask.observe(.progress) { snapshot in
  // A progress event occurred
}
    

Objective-C

// Add a progress observer to a download task
FIRStorageHandle observer = [downloadTask observeStatus:FIRStorageTaskStatusProgress
                                                handler:^(FIRStorageTaskSnapshot *snapshot) {
                                                  // A progress event occurred
                                                }];
    

Những nhà quan sát có thể được đăng ký một FIRStorageTaskStatus sự kiện:

'FIRStorageTaskStatus` tổ chức sự kiện Cách sử dụng điển hình
FIRStorageTaskStatusResume Sự kiện này cháy khi nhiệm vụ bắt đầu hoặc sơ yếu lý lịch tải về, và thường được sử dụng kết hợp với các FIRStorageTaskStatusPause sự kiện.
FIRStorageTaskStatusProgress Sự kiện này bắn bất cứ lúc nào dữ liệu sẽ được tải về từ Cloud Storage, và có thể được sử dụng để cư trú một chỉ số tải về tiến bộ.
FIRStorageTaskStatusPause Sự kiện này bắn bất cứ lúc nào khi tải về bị tạm dừng, và thường được sử dụng kết hợp với các FIRStorageTaskStatusResume sự kiện.
FIRStorageTaskStatusSuccess Sự kiện này bắn khi một download đã hoàn thành thành công.
FIRStorageTaskStatusFailure Sự kiện này bắn khi một tải đã thất bại. Kiểm tra lỗi để xác định nguyên nhân thất bại.

Khi một sự kiện xảy ra, một FIRStorageTaskSnapshot đối tượng được truyền lại. ảnh chụp này là một cái nhìn bất biến của nhiệm vụ, đồng thời sự kiện này xảy ra. Đối tượng này chứa các thuộc tính sau:

Bất động sản Kiểu Sự miêu tả
progress NSProgress Một NSProgress đối tượng chứa sự tiến bộ của tải.
error NSError Một lỗi đã xảy ra trong quá trình tải, nếu có.
metadata FIRStorageMetadata nil trên tải.
task FIRStorageDownloadTask Nhiệm vụ này là một bản chụp của, có thể được sử dụng để quản lý ( pause , resume , cancel ) nhiệm vụ.
reference FIRStorageReference Các tài liệu tham khảo công việc này đến từ đâu.

Bạn cũng có thể loại bỏ các nhà quan sát một cách riêng biệt, theo tình trạng, hoặc bằng cách loại bỏ tất cả chúng.

Nhanh

// Create a task listener handle
let observer = downloadTask.observe(.progress) { snapshot in
// A progress event occurred
}

// Remove an individual observer
downloadTask.removeObserver(withHandle: observer)

// Remove all observers of a particular status
downloadTask.removeAllObservers(for: .progress)

// Remove all observers
downloadTask.removeAllObservers()
    

Objective-C

// Create a task listener handle
FIRStorageHandle observer = [downloadTask observeStatus:FIRStorageTaskStatusProgress
                                                handler:^(FIRStorageTaskSnapshot *snapshot) {
                                                  // A progress event occurred
                                                }];

// Remove an individual observer
[downloadTask removeObserverWithHandle:observer];

// Remove all observers of a particular status
[downloadTask removeAllObserversForStatus:FIRStorageTaskStatusProgress];

// Remove all observers
[downloadTask removeAllObservers];
    

Để ngăn chặn rò rỉ bộ nhớ, tất cả các quan sát viên được gỡ bỏ sau khi một FIRStorageTaskStatusSuccess hoặc FIRStorageTaskStatusFailure xảy ra.

lỗi xử lý

Có một số lý do tại sao các lỗi có thể xảy ra trên tải, bao gồm cả các tập tin không tồn tại, hoặc người dùng không có quyền truy cập các tập tin mong muốn. Thông tin thêm về các lỗi có thể được tìm thấy trong các lỗi Xử lý phần của tài liệu.

Full Ví dụ

Một ví dụ đầy tải vào một tập tin địa phương với xử lý lỗi được hiển thị dưới đây:

Nhanh

// Create a reference to the file we want to download
let starsRef = storageRef.child("images/stars.jpg")

// Start the download (in this case writing to a file)
let downloadTask = storageRef.write(toFile: localURL)

// Observe changes in status
downloadTask.observe(.resume) { snapshot in
  // Download resumed, also fires when the download starts
}

downloadTask.observe(.pause) { snapshot in
  // Download paused
}

downloadTask.observe(.progress) { snapshot in
  // Download reported progress
  let percentComplete = 100.0 * Double(snapshot.progress!.completedUnitCount)
    / Double(snapshot.progress!.totalUnitCount)
}

downloadTask.observe(.success) { snapshot in
  // Download completed successfully
}

// Errors only occur in the "Failure" case
downloadTask.observe(.failure) { snapshot in
  guard let errorCode = (snapshot.error as? NSError)?.code else {
    return
  }
  guard let error = StorageErrorCode(rawValue: errorCode) else {
    return
  }
  switch (error) {
  case .objectNotFound:
    // File doesn't exist
    break
  case .unauthorized:
    // User doesn't have permission to access file
    break
  case .cancelled:
    // User cancelled the download
    break

  /* ... */

  case .unknown:
    // Unknown error occurred, inspect the server response
    break
  default:
    // Another error occurred. This is a good place to retry the download.
    break
  }
}
    

Objective-C

// Create a reference to the file we want to download
FIRStorageReference *starsRef = [storageRef child:@"images/stars.jpg"];

// Start the download (in this case writing to a file)
FIRStorageDownloadTask *downloadTask = [storageRef writeToFile:localURL];

// Observe changes in status
[downloadTask observeStatus:FIRStorageTaskStatusResume handler:^(FIRStorageTaskSnapshot *snapshot) {
  // Download resumed, also fires when the download starts
}];

[downloadTask observeStatus:FIRStorageTaskStatusPause handler:^(FIRStorageTaskSnapshot *snapshot) {
  // Download paused
}];

[downloadTask observeStatus:FIRStorageTaskStatusProgress handler:^(FIRStorageTaskSnapshot *snapshot) {
  // Download reported progress
  double percentComplete = 100.0 * (snapshot.progress.completedUnitCount) / (snapshot.progress.totalUnitCount);
}];

[downloadTask observeStatus:FIRStorageTaskStatusSuccess handler:^(FIRStorageTaskSnapshot *snapshot) {
  // Download completed successfully
}];

// Errors only occur in the "Failure" case
[downloadTask observeStatus:FIRStorageTaskStatusFailure handler:^(FIRStorageTaskSnapshot *snapshot) {
  if (snapshot.error != nil) {
    switch (snapshot.error.code) {
      case FIRStorageErrorCodeObjectNotFound:
        // File doesn't exist
        break;

      case FIRStorageErrorCodeUnauthorized:
        // User doesn't have permission to access file
        break;

      case FIRStorageErrorCodeCancelled:
        // User canceled the upload
        break;

      /* ... */

      case FIRStorageErrorCodeUnknown:
        // Unknown error occurred, inspect the server response
        break;
    }
  }
}];
    

Bạn cũng có thể nhận được và cập nhật siêu dữ liệu cho các tập tin được lưu trữ trong Cloud Storage.