@@ -85,10 +85,18 @@ open class Cute<EndPoint: EndPointType>: NSObject, NetworkRouter, URLSessionDele
85
85
//MARK: - Cute + Upload
86
86
extension Cute {
87
87
/// - petitUpload(_ root: EndPoint, image: UIImage, fileName: String, imageType: String, petitLogVisible: Bool) async throws -> Data 함수를 래핑
88
- open func petitUpload< T: Decodable > ( _ root: EndPoint , imageType: ImageInformation , petitLogVisible: Bool = true ) async throws -> T {
88
+ open func petitUpload< T: Decodable > ( _ root: EndPoint ,
89
+ imageMultiPart: ImageInformation ? = nil ,
90
+ videoMultiPart: VideoInformation ? = nil ,
91
+ petitLogVisible: Bool = true ) async throws -> T {
92
+ guard imageMultiPart != nil || videoMultiPart != nil else {
93
+ throw NetworkError . custom ( message: " 잘못된 접근 " )
94
+ }
95
+
89
96
do {
90
97
let result = try await petitUpload ( root,
91
- imageType: imageType,
98
+ imageMultiPart: imageMultiPart,
99
+ videoMultiPart: videoMultiPart,
92
100
petitLogVisible: petitLogVisible)
93
101
94
102
let decoder = JSONDecoder ( )
@@ -103,10 +111,19 @@ extension Cute {
103
111
}
104
112
}
105
113
/// - petitUpload(_ route: EndPoint, image: UIImage, fileName: String, imageType: String, logAccess: Bool, completion: @escaping NetworkRouterCompletion) 함수를 래핑
106
- open func petitUpload( _ root: EndPoint , imageType: ImageInformation , petitLogVisible: Bool ) async throws -> Data {
114
+ open func petitUpload( _ root: EndPoint ,
115
+ imageMultiPart: ImageInformation ? = nil ,
116
+ videoMultiPart: VideoInformation ? = nil ,
117
+ petitLogVisible: Bool ) async throws -> Data {
118
+ guard imageMultiPart != nil || videoMultiPart != nil else {
119
+ throw NetworkError . custom ( message: " 잘못된 접근 " )
120
+ }
121
+
122
+
107
123
return try await withCheckedThrowingContinuation ( { value in
108
124
petitUpload ( root,
109
- imageType: imageType,
125
+ imageMultiPart: imageMultiPart,
126
+ videoMultiPart: videoMultiPart,
110
127
logAccess: petitLogVisible) { data, response, error in
111
128
if let error {
112
129
value. resume ( throwing: error as? NetworkError ?? NetworkError . custom ( message: error. localizedDescription) )
@@ -132,7 +149,17 @@ extension Cute {
132
149
} )
133
150
}
134
151
/// dataTask를 걸친 데이터 까지 넘겨주는 역할
135
- open func petitUpload( _ route: EndPoint , imageType: ImageInformation , logAccess: Bool , completion: @escaping NetworkRouterCompletion ) {
152
+ open func petitUpload( _ route: EndPoint ,
153
+ imageMultiPart: ImageInformation ? = nil ,
154
+ videoMultiPart: VideoInformation ? = nil ,
155
+ logAccess: Bool ,
156
+ completion: @escaping NetworkRouterCompletion ) {
157
+
158
+ guard imageMultiPart != nil || videoMultiPart != nil else {
159
+ completion ( nil , nil , NetworkError . custom ( message: " 잘못된 접근 " ) )
160
+ return
161
+ }
162
+
136
163
guard Reachability . isConnectedToNetwork ( ) else {
137
164
completion ( nil , nil , NetworkError . noConnectionToInternet)
138
165
return
@@ -149,10 +176,19 @@ extension Cute {
149
176
do {
150
177
let boundary = " Boundary- \( UUID ( ) . uuidString) "
151
178
let request = try self . buildRequest ( from: route, boundary: boundary)
152
- let multipartBody = createMultipartBody ( boundary, imageType)
179
+ let multipartBody : Data ?
180
+ if let imageMultiPart {
181
+ multipartBody = createMultipartBody ( boundary, imageMultiPart)
182
+ } else {
183
+ print ( " 요기 " )
184
+ multipartBody = createMultipartBody ( boundary, videoMultiPart!)
185
+ }
153
186
if logAccess { NetworkLogger . log ( request: request) }
154
187
155
- task = session. uploadTask ( with: request, from: multipartBody, completionHandler: { data, response, error in
188
+ task = session. uploadTask ( with: request, from: multipartBody!, completionHandler: { data, response, error in
189
+ print ( String ( data: data!, encoding: . utf8) )
190
+ print ( response)
191
+ print ( error)
156
192
completion ( data, response, error)
157
193
} )
158
194
@@ -181,12 +217,27 @@ extension Cute {
181
217
var uploadData = Data ( )
182
218
if let data = imageType. image. jpegData ( compressionQuality: 0.8 ) {
183
219
uploadData. append ( boundaryPrefix. data ( using: . utf8) !)
184
- uploadData. append ( " Content-Disposition: form-data; name= \" img \ "; filename= \" \( imageType. imageName ) . \( imageType ) \" \r \n " . data ( using: . utf8) !)
185
- uploadData. append ( " Content-Type: image/ \( imageType. imageType ) \r \n \r \n " . data ( using: . utf8) !)
220
+ uploadData. append ( " Content-Disposition: form-data; name= \" \( imageType . fieldName ) \ "; filename= \" \( imageType. fileName ) \" \r \n " . data ( using: . utf8) !)
221
+ uploadData. append ( " Content-Type: \( imageType. mimeType ) \r \n \r \n " . data ( using: . utf8) !)
186
222
uploadData. append ( data)
187
223
uploadData. append ( " \r \n " . data ( using: . utf8) !)
188
224
uploadData. append ( " -- \( boundary) -- " . data ( using: . utf8) !)
189
- } // adjust compression quality as needed
225
+ }
226
+ return uploadData
227
+ }
228
+
229
+ fileprivate func createMultipartBody( _ boundary: String , _ videoMultiPart: VideoInformation ) -> Data {
230
+ print ( #function)
231
+ let boundaryPrefix = " -- \( boundary) \r \n "
232
+ var uploadData = Data ( )
233
+ if let data = try ? Data ( contentsOf: videoMultiPart. videoURL) {
234
+ uploadData. append ( boundaryPrefix. data ( using: . utf8) !)
235
+ uploadData. append ( " Content-Disposition: form-data; name= \" \( videoMultiPart. fieldName) \" ; filename= \" \( videoMultiPart. fileName) \" \r \n " . data ( using: . utf8) !)
236
+ uploadData. append ( " Content-Type: \( videoMultiPart. mimeType) \r \n \r \n " . data ( using: . utf8) !)
237
+ uploadData. append ( data)
238
+ uploadData. append ( " \r \n " . data ( using: . utf8) !)
239
+ uploadData. append ( " -- \( boundary) -- " . data ( using: . utf8) !)
240
+ }
190
241
return uploadData
191
242
}
192
243
0 commit comments