Skip to content

Commit 0512dda

Browse files
committed
[Feat] #192 - PresignedURL 발급 시 width, height, size 항목 추가
1 parent e272b18 commit 0512dda

5 files changed

Lines changed: 54 additions & 4 deletions

File tree

Neki-iOS/Core/Sources/ImagePicker/Data/DTO/PresignedURLRequestDTO.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ public struct PresignedURLRequestData: Encodable {
1515
public let filename: String
1616
public let contentType: String
1717
public let mediaType: String
18+
public let width, height, size: Int?
1819
}

Neki-iOS/Core/Sources/ImagePicker/Data/DefaultImageUploadRepository.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ public struct DefaultImageUploadRepository: ImageUploadRepository {
2424
PresignedURLRequestData(
2525
filename: UUID().uuidString,
2626
contentType: item.contentType,
27-
mediaType: mediaType.rawValue
27+
mediaType: mediaType.rawValue,
28+
width: item.width,
29+
height: item.height,
30+
size: item.size
2831
)
2932
}
3033
let requestDTO = PresignedURLRequestDTO(items: requestItems)

Neki-iOS/Core/Sources/ImagePicker/Domain/ImageUploadClient.swift

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,17 @@ extension ImageUploadClient: DependencyKey {
3333
var entities: [ImageUploadEntity] = []
3434
for url in chunk {
3535
let data = try Data(contentsOf: url)
36-
entities.append(ImageUploadEntity(data: data, format: data.detectedImageFormat))
36+
let dimensions = data.imageDimensions
37+
38+
entities.append(
39+
ImageUploadEntity(
40+
data: data,
41+
format: data.detectedImageFormat,
42+
width: dimensions?.width,
43+
height: dimensions?.height,
44+
size: data.count
45+
)
46+
)
3747
}
3848

3949
let resultIDs = try await repository.upload(items: entities, mediaType: mediaType)
@@ -47,7 +57,15 @@ extension ImageUploadClient: DependencyKey {
4757
for item in items {
4858
group.addTask {
4959
guard let data = try? await item.loadTransferable(type: Data.self) else { return nil }
50-
return ImageUploadEntity(data: data, format: data.detectedImageFormat)
60+
let dimensions = data.imageDimensions
61+
62+
return ImageUploadEntity(
63+
data: data,
64+
format: data.detectedImageFormat,
65+
width: dimensions?.width,
66+
height: dimensions?.height,
67+
size: data.count
68+
)
5169
}
5270
}
5371

Neki-iOS/Core/Sources/ImagePicker/Domain/ImageUploadEntity.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,27 @@ public struct ImageUploadEntity: Identifiable, Sendable {
1212
public let data: Data
1313
public let format: ImageFileFormat
1414

15+
public let width: Int?
16+
public let height: Int?
17+
public let size: Int?
18+
1519
public var contentType: String { format.contentType }
1620
public var fileExtension: String { format.fileExtension }
1721

1822
public init(
1923
id: UUID = UUID(),
2024
data: Data,
21-
format: ImageFileFormat
25+
format: ImageFileFormat,
26+
width: Int? = nil,
27+
height: Int? = nil,
28+
size: Int? = nil
2229
) {
2330
self.id = id
2431
self.data = data
2532
self.format = format
33+
self.width = width
34+
self.height = height
35+
self.size = size
2636
}
2737
}
2838

Neki-iOS/Core/Sources/ImagePicker/Presentation/Extension/Data+.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,22 @@ extension Data {
4242
else { return nil }
4343
return UTType(typeIdentifier as String)
4444
}
45+
46+
var imageDimensions: (width: Int, height: Int)? {
47+
let options: [CFString: Any] = [kCGImageSourceShouldCache: false]
48+
49+
guard let source = CGImageSourceCreateWithData(self as CFData, options as CFDictionary),
50+
let properties = CGImageSourceCopyPropertiesAtIndex(source, 0, options as CFDictionary) as? [CFString: Any] else {
51+
return nil
52+
}
53+
54+
var width = properties[kCGImagePropertyPixelWidth] as? Int
55+
var height = properties[kCGImagePropertyPixelHeight] as? Int
56+
57+
if let w = width, let h = height {
58+
return (w, h)
59+
}
60+
61+
return nil
62+
}
4563
}

0 commit comments

Comments
 (0)