Browse Source

Added method for appending body part with data, name and mime type.

Christian Noon 10 years ago
parent
commit
7de9fe9e96
2 changed files with 28 additions and 4 deletions
  1. 22 0
      Source/MultipartFormData.swift
  2. 6 4
      Tests/MultipartFormDataTests.swift

+ 22 - 0
Source/MultipartFormData.swift

@@ -154,6 +154,28 @@ public class MultipartFormData {
         appendBodyPart(stream: stream, length: length, headers: headers)
     }
 
+    /**
+        Creates a body part from the data and appends it to the multipart form data object.
+
+        The body part data will be encoded using the following format:
+
+        - `Content-Disposition: form-data; name=#{name}` (HTTP Header)
+        - `Content-Type: #{generated mimeType}` (HTTP Header)
+        - Encoded data
+        - Multipart form boundary
+
+        :param: data The data to encode into the multipart form data.
+        :param: name The name to associate with the data in the `Content-Disposition` HTTP header.
+        :param: mimeType The MIME type to associate with the data content type in the `Content-Type` HTTP header.
+    */
+    public func appendBodyPart(#data: NSData, name: String, mimeType: String) {
+        let headers = contentHeaders(name: name, mimeType: mimeType)
+        let stream = NSInputStream(data: data)
+        let length = UInt64(data.length)
+
+        appendBodyPart(stream: stream, length: length, headers: headers)
+    }
+
     /**
         Creates a body part from the data and appends it to the multipart form data object.
 

+ 6 - 4
Tests/MultipartFormDataTests.swift

@@ -141,8 +141,8 @@ class MultipartFormDataEncodingTestCase: BaseTestCase {
 
         // When
         multipartFormData.appendBodyPart(data: french, name: "french")
-        multipartFormData.appendBodyPart(data: japanese, name: "japanese")
-        multipartFormData.appendBodyPart(data: emoji, name: "emoji")
+        multipartFormData.appendBodyPart(data: japanese, name: "japanese", mimeType: "text/plain")
+        multipartFormData.appendBodyPart(data: emoji, name: "emoji", mimeType: "text/plain")
         let encodingResult = multipartFormData.encode()
 
         // Then
@@ -155,10 +155,12 @@ class MultipartFormDataEncodingTestCase: BaseTestCase {
                 "Content-Disposition: form-data; name=\"french\"\(self.CRLF)\(self.CRLF)" +
                 "français" +
                 BoundaryGenerator.boundary(boundaryType: .Encapsulated, boundaryKey: boundary) +
-                "Content-Disposition: form-data; name=\"japanese\"\(self.CRLF)\(self.CRLF)" +
+                "Content-Disposition: form-data; name=\"japanese\"\(self.CRLF)" +
+                "Content-Type: text/plain\(self.CRLF)\(self.CRLF)" +
                 "日本語" +
                 BoundaryGenerator.boundary(boundaryType: .Encapsulated, boundaryKey: boundary) +
-                "Content-Disposition: form-data; name=\"emoji\"\(self.CRLF)\(self.CRLF)" +
+                "Content-Disposition: form-data; name=\"emoji\"\(self.CRLF)" +
+                "Content-Type: text/plain\(self.CRLF)\(self.CRLF)" +
                 "😃👍🏻🍻🎉" +
                 BoundaryGenerator.boundary(boundaryType: .Final, boundaryKey: boundary)
             ).dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!