将 UIImage 视图转换为 NSURL 以将其上传到 Firebase
Converting the UIImage view to NSURL to upload it to Firebase
我正在尝试将图像从图像视图上传到 Firebase 存储。
用户将从相册或相机上传图像到图像视图!我想要的是将此图像从图像视图上传到 firebase 存储。
我尝试按照 Firebase 文档中的示例进行操作,如下所示:
let localFile: NSURL = ImageView.image
let metadata = FIRStorageMetadata()
metadata.contentType = "image/jpeg"
// Upload file and metadata to the object 'images/mountains.jpg'
let uploadTask = storage.child("images/DeviceImage.jpg").putFile(localFile, metadata: metadata);
// Listen for state changes, errors, and completion of the upload.
uploadTask.observeStatus(.Pause) { snapshot in
// Upload paused
}
uploadTask.observeStatus(.Resume) { snapshot in
// Upload resumed, also fires when the upload starts
}
uploadTask.observeStatus(.Progress) { snapshot in
// Upload reported progress
if let progress = snapshot.progress {
let percentComplete = 100.0 * Double(progress.completedUnitCount) / Double(progress.totalUnitCount)
}
}
uploadTask.observeStatus(.Success) { snapshot in
// Upload completed successfully
}
// Errors only occur in the "Failure" case
uploadTask.observeStatus(.Failure) { snapshot in
guard let storageError = snapshot.error else { return }
guard let errorCode = FIRStorageErrorCode(rawValue: storageError.code) else { return }
switch errorCode {
case .ObjectNotFound:
// File doesn't exist
case .Unauthorized:
// User doesn't have permission to access file
case .Cancelled:
// User canceled the upload
...
case .Unknown:
// Unknown error occurred, inspect the server response
}
}
但是我不知道如何将UIImageView转换成NSURL。
这是我得到的错误:
您需要将图像转换为磁盘上的文件并获取要上传的 url。
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let filePath = "\(paths[0])/MyImageName.jpg"
// Save image.
UIImageJPEGRepresentation(image, 0.90)?.writeToFile(filePath, atomically: true)
参见:How do I save a UIImage to a file?
写入磁盘后,您可以获得文件的 url,如下所示:
let localFile = NSURL(fileURLWithPath: filePath)
您可以获取所选图像的 PNG 字节并像这样上传它,而不是将其转换为 NSURL:
storage.reference().child("images/imageName.png").putData(selectedImage!.pngData()!, metadata: nil, completion: {_, error in
guard error == nil else{
print("failed to upload image")
return
}
})
我正在尝试将图像从图像视图上传到 Firebase 存储。
用户将从相册或相机上传图像到图像视图!我想要的是将此图像从图像视图上传到 firebase 存储。
我尝试按照 Firebase 文档中的示例进行操作,如下所示:
let localFile: NSURL = ImageView.image
let metadata = FIRStorageMetadata()
metadata.contentType = "image/jpeg"
// Upload file and metadata to the object 'images/mountains.jpg'
let uploadTask = storage.child("images/DeviceImage.jpg").putFile(localFile, metadata: metadata);
// Listen for state changes, errors, and completion of the upload.
uploadTask.observeStatus(.Pause) { snapshot in
// Upload paused
}
uploadTask.observeStatus(.Resume) { snapshot in
// Upload resumed, also fires when the upload starts
}
uploadTask.observeStatus(.Progress) { snapshot in
// Upload reported progress
if let progress = snapshot.progress {
let percentComplete = 100.0 * Double(progress.completedUnitCount) / Double(progress.totalUnitCount)
}
}
uploadTask.observeStatus(.Success) { snapshot in
// Upload completed successfully
}
// Errors only occur in the "Failure" case
uploadTask.observeStatus(.Failure) { snapshot in
guard let storageError = snapshot.error else { return }
guard let errorCode = FIRStorageErrorCode(rawValue: storageError.code) else { return }
switch errorCode {
case .ObjectNotFound:
// File doesn't exist
case .Unauthorized:
// User doesn't have permission to access file
case .Cancelled:
// User canceled the upload
...
case .Unknown:
// Unknown error occurred, inspect the server response
}
}
但是我不知道如何将UIImageView转换成NSURL。
这是我得到的错误:
您需要将图像转换为磁盘上的文件并获取要上传的 url。
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let filePath = "\(paths[0])/MyImageName.jpg"
// Save image.
UIImageJPEGRepresentation(image, 0.90)?.writeToFile(filePath, atomically: true)
参见:How do I save a UIImage to a file?
写入磁盘后,您可以获得文件的 url,如下所示:
let localFile = NSURL(fileURLWithPath: filePath)
您可以获取所选图像的 PNG 字节并像这样上传它,而不是将其转换为 NSURL:
storage.reference().child("images/imageName.png").putData(selectedImage!.pngData()!, metadata: nil, completion: {_, error in
guard error == nil else{
print("failed to upload image")
return
}
})