keep original medium file extension

This commit is contained in:
Wenqi Li 2021-01-10 17:34:37 +08:00
parent f9acd58270
commit 749188bb82

View File

@ -338,12 +338,13 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin {
completion(nil, NSError(domain: "photo_gallery", code: 404, userInfo: nil)) completion(nil, NSError(domain: "photo_gallery", code: 404, userInfo: nil))
return return
} }
let fileExt = self.toFileExtension(uti: assetUTI) let fileExt = self.extractFileExtensionFromUTI(uti: assetUTI)
let filepath = self.exportPathForAsset(asset: asset, ext: fileExt) let filepath = self.exportPathForAsset(asset: asset, ext: fileExt)
try! imageData.write(to: filepath, options: .atomic) try! imageData.write(to: filepath, options: .atomic)
completion(filepath.absoluteString, nil) completion(filepath.absoluteString, nil)
}) })
}) }
)
} else if(asset.mediaType == PHAssetMediaType.video } else if(asset.mediaType == PHAssetMediaType.video
|| asset.mediaType == PHAssetMediaType.audio) { || asset.mediaType == PHAssetMediaType.audio) {
let options = PHVideoRequestOptions() let options = PHVideoRequestOptions()
@ -356,14 +357,16 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin {
do { do {
let avAsset = avAsset as? AVURLAsset let avAsset = avAsset as? AVURLAsset
let data = try Data(contentsOf: avAsset!.url) let data = try Data(contentsOf: avAsset!.url)
let filepath = self.exportPathForAsset(asset: asset, ext: ".mov") let fileExt = self.extractFileExtensionFromAsset(asset: asset)
let filepath = self.exportPathForAsset(asset: asset, ext: fileExt)
try! data.write(to: filepath, options: .atomic) try! data.write(to: filepath, options: .atomic)
completion(filepath.absoluteString, nil) completion(filepath.absoluteString, nil)
} catch { } catch {
completion(nil, NSError(domain: "photo_gallery", code: 500, userInfo: nil)) completion(nil, NSError(domain: "photo_gallery", code: 500, userInfo: nil))
} }
}) })
}) }
)
} }
} }
} }
@ -421,11 +424,28 @@ public class SwiftPhotoGalleryPlugin: NSObject, FlutterPlugin {
return NSPredicate(format: "mediaType = %d", swiftType!.rawValue) return NSPredicate(format: "mediaType = %d", swiftType!.rawValue)
} }
private func toFileExtension(uti: String) -> String { private func extractFileExtensionFromUTI(uti: String?) -> String {
if let ext = UTTypeCopyPreferredTagWithClass(uti as CFString, kUTTagClassFilenameExtension as CFString)?.takeRetainedValue() as String? { guard let assetUTI = uti else {
return ext
} else {
return "" return ""
} }
guard let ext = UTTypeCopyPreferredTagWithClass(assetUTI as CFString, kUTTagClassFilenameExtension as CFString)?.takeRetainedValue() as String? else {
return ""
}
return "." + ext
}
private func extractUTIFromAsset(asset: PHAsset) -> String? {
if #available(iOS 9, *) {
let resourceList = PHAssetResource.assetResources(for: asset)
if let resource = resourceList.first {
return resource.uniformTypeIdentifier
}
}
return asset.value(forKey: "uniformTypeIdentifier") as? String
}
private func extractFileExtensionFromAsset(asset: PHAsset) -> String {
let uti = self.extractUTIFromAsset(asset: asset)
return self.extractFileExtensionFromUTI(uti: uti)
} }
} }