Когда мы пытаемся загрузить большой файл (Chunk Wise) в Azure Blob, мы получаем проблему с высоким использованием памяти в iOS. Приведенный ниже код был использован для загрузки большого файла (Chunk Wise) в Azure Blob.
func uploadToBlob(_ url: URL) {
let blobClient = self.account?.getBlobClient()
let blobContainer = blobClient?.containerReference(fromName: Configure.shared.blobName!)
let blobBlock = blobContainer?.directoryReference(fromName: blobFolder).subdirectoryReference(fromName: directory).subdirectoryReference(fromName: subDirectory).blockBlobReference(fromName: Date().toUploadFormate+"_"+orgUrl.lastPathComponent)
let data = NSData(contentsOf: url)!
let length = data.length
let chunkSize = 4194304
var offset = 0
var blockList : [AZSBlockListItem] = []
func nextChunk() {
let thisChunkSize = length - offset > chunkSize ? chunkSize : length - offset
let chunk = Data(bytesNoCopy: UnsafeMutableRawPointer(mutating: data.bytes+offset), count: thisChunkSize, deallocator: .none)
offset += thisChunkSize
let utf8str = UUID().uuidString.data(using: .utf8)
if let base64EncodedId = utf8str?.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0)) {
blockList.append(AZSBlockListItem(blockID: base64EncodedId, blockListMode: .uncommitted))
func uploadBlockList() {
blobBlock?.uploadBlockList(from: blockList, completionHandler: { (bError) in
guard bError == nil else {
print(bError!)
uploadBlockList()
return
}
})
}
func uploadBlock() {
blobBlock?.uploadBlock(from: chunk, blockID: base64EncodedId, completionHandler: { (error) in
guard error == nil else {
uploadBlock()
return
}
guard offset >= length else {
nextChunk()
return
}
uploadBlockList()
})
}
uploadBlock()
}
}
nextChunk()
}
Это изображение, отображающее проблему с высоким использованием памяти.