Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Git
- Archive
- 개발자
- darkmode
- Python
- MacOS
- Notification
- FLUTTER
- mac
- Swift
- appstore
- Session
- 한글
- Code
- Apple
- 웹뷰
- view
- stack
- UIButton
- SwiftUI
- JPA
- Firebase
- IOS
- iOS16
- Realm
- window
- rxswift
- error
- github
- Xcode
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
multipart/form-data 본문
반응형
여러 데이터를 body에 담아 보낼 수 있는 기특한 Content-Type인 multipart/form-data
해당 데이터를 작성하고, 파싱 하는데에는 아래와 같은 특별한 규칙이 있다
--바운더리
데이터1에 필요한 헤더들
데이터1
--바운더리
데이터2에 필요한 헤더들
데이터2
--바운더리--
1. 바운더리는 데이터와 겹치지 않도록 특수한 string값으로 정하고,
2. 모든 바운더리 앞에 "--"를 붙힌다.
3. 마지막 바운더리는 뒤에도 "--"를 붙힌다.
* 특이한점은, 바운더리만으로 데이터 영역을 구분하는 줄 알았는데, 줄바꿈까지 똑같은 형태로 해야한다는 점이다...
무슨 줄바꿈까지.. ㅋㅋ.. 덕분에 3시간 날렸네ㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔ
아래는 swift에서의 예시...
// 리퀘 생성
var request = URLRequest(url: requestUrl, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 30)
// 리퀘 메소드
request.httpMethod = "POST"
// 리퀘 헤드
let boundary = "Boundary_\(UUID().uuidString)"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
// 리퀘 바디
let content1 = "content1"
let content2 = "content2"
let content3 = "content3"
let fileName = "testFileName"
guard let imageData = UIImage(named: "testImage").jpegData(compressionQuality: 0.8) else {
return
}
var data = Data()
data.append("--\(boundary)\r\n".data(using: .utf8)!)
data.append("Content-Disposition: form-data; name=\"key1\"\r\n\r\n".data(using: .utf8)!)
data.append(key1.data(using: .utf8)!)
data.append("\r\n--\(boundary)\r\n".data(using: .utf8)!)
data.append("Content-Disposition: form-data; name=\"key2\"\r\n\r\n".data(using: .utf8)!)
data.append(key3.data(using: .utf8)!)
data.append("\r\n--\(boundary)\r\n".data(using: .utf8)!)
data.append("Content-Disposition: form-data; name=\"key3\"\r\n\r\n".data(using: .utf8)!)
data.append(key3.data(using: .utf8)!)
data.append("\r\n--\(boundary)\r\n".data(using: .utf8)!)
data.append("Content-Disposition: form-data; name=\"file\"; filename=\"\(fileName).jpg\"\r\n".data(using: .utf8)!)
data.append("Content-Type: image/jpg\r\n\r\n".data(using: .utf8)!)
data.append(imageData)
data.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)
request.httpBody = data
'iOS, Swift' 카테고리의 다른 글
iOS ) 애플 스토어 커넥트 주소 오류 - EEYatHo iOS (0) | 2022.01.17 |
---|---|
Swift ) could not find module 'lottie' for target 'arm64-apple-ios'; found: armv7-apple-ios, arm, armv7 - EEYatHo iOS (0) | 2021.12.14 |
Swift ) Request image/png 보내기 - EEYatHo iOS (0) | 2021.12.10 |
Swift ) Dynamic Color, CGColor - EEYatHo iOS (0) | 2021.12.06 |
Swift ) UIColor로 UIImage만들기, DynamicUIImage만들기 - EEYatHo iOS (0) | 2021.12.06 |
Comments