@@ -48,15 +48,30 @@ enum Boundary {
4848
4949struct BodyPart {
5050 let headers : [ Header ]
51- let stream : InputStream
5251 let length : Int
52+ let stream : ( ) throws -> InputStream
53+
5354 var hasInitialBoundary = false
5455 var hasFinalBoundary = false
5556
56- init ( headers: [ Header ] , stream: InputStream , length: Int ) {
57+ private init ( headers: [ Header ] , stream: @escaping ( ) throws -> InputStream , length: Int ) {
5758 self . headers = headers
58- self . stream = stream
5959 self . length = length
60+ self . stream = stream
61+ }
62+
63+ init ( headers: [ Header ] , url: URL , length: Int ) {
64+ let stream : ( ) throws -> InputStream = {
65+ guard let stream = InputStream ( url: url) else {
66+ throw MultipartFormData . Error. inputStreamCreationFailed ( url)
67+ }
68+ return stream
69+ }
70+ self . init ( headers: headers, stream: stream, length: length)
71+ }
72+
73+ init ( headers: [ Header ] , data: Data ) {
74+ self . init ( headers: headers, stream: { InputStream ( data: data) } , length: data. count)
6075 }
6176}
6277
@@ -126,12 +141,7 @@ public struct MultipartFormData {
126141 }
127142
128143 let length = fileSize. intValue
129-
130- guard let stream = InputStream ( url: url) else {
131- throw MultipartFormData . Error. inputStreamCreationFailed ( url)
132- }
133-
134- bodyParts. append ( BodyPart ( headers: headers, stream: stream, length: length) )
144+ bodyParts. append ( BodyPart ( headers: headers, url: url, length: length) )
135145 }
136146
137147 /// Creates a body part from the data and add it to the instance.
@@ -150,10 +160,8 @@ public struct MultipartFormData {
150160 /// - mimeType: MIME type associated to the data in the `Content-Type` HTTPHeader.
151161 public mutating func add( data: Data , name: String , fileName: String ? = nil , mimeType: String ? = nil ) {
152162 let headers = defineBodyPartHeader ( name: name, fileName: fileName, mimeType: mimeType)
153- let stream = InputStream ( data: data)
154- let length = data. count
155163
156- bodyParts. append ( BodyPart ( headers: headers, stream : stream , length : length ) )
164+ bodyParts. append ( BodyPart ( headers: headers, data : data ) )
157165 }
158166
159167 private func defineBodyPartHeader( name: String , fileName: String ? , mimeType: String ? ) -> [ Header ] {
0 commit comments