Предположим, у меня есть массив UIImage
с именем photos
, они должны быть загружены в хранилище Firebase.Я хочу сделать следующие вещи:
Загрузить их в хранилище Firebase
Получить пути к загруженным фотографиям и сохранить их в массиве с именем uploadedAssets
( paths , не скачать URL, это выглядит так: "photos / folder_name / photo_id"), где "folder_name" генерируется случайным образом, а "photo_id" - целое число, представляющее порядок фотографий
Вызовите функцию Cloud и передайте ей uploadedAssets
.Затем сервер использует пути для поиска всех изображений и создает миниатюру для каждого из них.
Наконец, сохраните исходные фотографии для загрузки и ссылки для загрузки миниатюр в базе данных.
У меня есть кое-что, что работает, но использует слишком много памяти (300 + МБ при загрузке только 4 изображений):
// Swift
let dispatchGroup = DispatchGroup()
let dispatchQueue = DispatchQueue.init(label: "AssetQueue")
var uploadedAssets = [String]()
let folderName: String = UUID().uuidString
dispatchQueue.async {
for i in 0..<photos.count {
dispatchGroup.enter()
let photo: UIImage = photos[i]
let fileName: String = "\(folderName)/\(i)"
let assetRef = Storage.storage().reference().child("photos/\(fileName)")
let metaData = StorageMetaData()
metaData.contentType = "image/jpg"
if let dataToUpload = UIImageJPEGRepresentation(photo, 0.75) {
assetRef.putData(
dataToUpload,
metaData: metaData,
completion: { (_, error) in
uploadedAssets.append("photos/\(fileName)")
dispatchGroup.leave()
}
)
}
}
}
dispatchGroup.notify(queue: dispatchQueue) {
Alamofire.request(
"https://<some_url>",
method: .post,
parameters: [
"uploadedAssets": uploadedAssets
]
)
}
И код, который генерирует эскизы, запускается на стороне серверапоэтому, на мой взгляд, не имеет значения, я не буду размещать это здесь.Таким образом, приведенный фрагмент кода потребляет 300 + МБ памяти, когда нужно загрузить 4 фотографии.После успешной загрузки этих фотографий использование памяти остается на уровне 300 + МБ и никогда не падает.Когда я пытаюсь загрузить больше, скажем, еще 4 фотографии, он может даже подняться до 450 МБ.Я знаю, что это не нормально, но не могу понять, почему это произошло?