Skip to content

Commit 89f2f71

Browse files
authored
Merge pull request #714 from postmanlabs/github-10139-swift-generated-code-for-multipart-form-data-video-upload-does-not-work-from-device-simulator
[GITHUB-10139][Fix] Generated Swift code not working for multipart/form-data video upload
2 parents fce73e6 + e0c3bda commit 89f2f71

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## [Unreleased]
44

5+
### Fixed
6+
7+
- Fix for - [#10139](https://github.com/postmanlabs/postman-app-support/issues/10139) Modify Swift codegen to work with multipart/form-data format, used for video file upload
8+
59
## [v1.8.0] - 2023-06-27
610

711
- Fix for - [#10521](https://github.com/postmanlabs/postman-app-support/issues/10521) Add support for Dart Dio snippet generation

codegens/swift/lib/swift.js

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,29 +111,34 @@ function parseFormData (body, mode, trim, indent) {
111111
parameters = '[\n' + _.join(parameters, ',\n') + ']';
112112
bodySnippet = `let parameters = ${parameters} as [[String: Any]]\n\n`;
113113
bodySnippet += 'let boundary = "Boundary-\\(UUID().uuidString)"\n';
114-
bodySnippet += 'var body = ""\nvar error: Error? = nil\n';
114+
bodySnippet += 'var body = Data()\nvar error: Error? = nil\n';
115115
bodySnippet += 'for param in parameters {\n';
116116
bodySnippet += `${indent}if param["disabled"] != nil { continue }\n`;
117117
bodySnippet += `${indent}let paramName = param["key"]!\n`;
118-
bodySnippet += `${indent}body += "--\\(boundary)\\r\\n"\n`;
118+
bodySnippet += `${indent}body += Data("--\\(boundary)\\r\\n".utf8)\n`;
119119
// eslint-disable-next-line no-useless-escape
120-
bodySnippet += `${indent}body += "Content-Disposition:form-data; name=\\"\\(paramName)\\"\"\n`;
120+
bodySnippet += `${indent}body += Data("Content-Disposition:form-data; name=\\"\\(paramName)\\"\".utf8)\n`;
121121
bodySnippet += `${indent}if param["contentType"] != nil {\n`;
122-
bodySnippet += `${indent.repeat(2)}body += "\\r\\nContent-Type: \\(param["contentType"] as! String)"\n`;
122+
bodySnippet += `${indent.repeat(2)}body += Data("\\r\\nContent-Type: \\(param["contentType"] as! String)".utf8)\n`;
123123
bodySnippet += `${indent}}\n`;
124124
bodySnippet += `${indent}let paramType = param["type"] as! String\n`;
125125
bodySnippet += `${indent}if paramType == "text" {\n`;
126126
bodySnippet += `${indent.repeat(2)}let paramValue = param["value"] as! String\n`;
127-
bodySnippet += `${indent.repeat(2)}body += "\\r\\n\\r\\n\\(paramValue)\\r\\n"\n`;
127+
bodySnippet += `${indent.repeat(2)}body += Data("\\r\\n\\r\\n\\(paramValue)\\r\\n".utf8)\n`;
128128
bodySnippet += `${indent}} else {\n`;
129129
bodySnippet += `${indent.repeat(2)}let paramSrc = param["src"] as! String\n`;
130-
bodySnippet += `${indent.repeat(2)}let fileData = try NSData(contentsOfFile: paramSrc, options: []) as Data\n`;
131-
bodySnippet += `${indent.repeat(2)}let fileContent = String(data: fileData, encoding: .utf8)!\n`;
132-
bodySnippet += `${indent.repeat(2)}body += "; filename=\\"\\(paramSrc)\\"\\r\\n"\n`;
133-
bodySnippet += `${indent.repeat(2)} + "Content-Type: \\"content-type header\\"\\r\\n\\r\\n`;
134-
bodySnippet += '\\(fileContent)\\r\\n"\n';
135-
bodySnippet += `${indent}}\n}\nbody += "--\\(boundary)--\\r\\n";\n`;
136-
bodySnippet += 'let postData = body.data(using: .utf8)';
130+
bodySnippet += `${indent.repeat(2)}let fileURL = URL(fileURLWithPath: paramSrc)\n`;
131+
bodySnippet += `${indent.repeat(2)}if let fileContent = try? Data(contentsOf: fileURL) {\n`;
132+
bodySnippet += `${indent.repeat(3)}body += Data("; filename=\\"\\(paramSrc)\\"\\r\\n".utf8)\n`;
133+
bodySnippet += `${indent.repeat(3)}body += Data("Content-Type: \\"content-type header\\"\\r\\n".utf8)\n`;
134+
bodySnippet += `${indent.repeat(3)}body += Data("\\r\\n".utf8)\n`;
135+
bodySnippet += `${indent.repeat(3)}body += fileContent\n`;
136+
bodySnippet += `${indent.repeat(3)}body += Data("\\r\\n".utf8)\n`;
137+
bodySnippet += `${indent.repeat(2)}}\n`;
138+
bodySnippet += `${indent}}\n`;
139+
bodySnippet += '}\n';
140+
bodySnippet += 'body += Data("--\\(boundary)--\\r\\n".utf8);\n';
141+
bodySnippet += 'let postData = body\n';
137142
return bodySnippet;
138143
}
139144

codegens/swift/test/unit/convert.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ describe('Swift Converter', function () {
6262
}
6363
expect(snippet).to.be.a('string');
6464
expect(snippet).to.contain('if param["contentType"] != nil {');
65-
expect(snippet).to.contain('body += "\\r\\nContent-Type: \\(param["contentType"] as! String)"');
65+
expect(snippet).to.contain('body += Data("\\r\\nContent-Type: \\(param["contentType"] as! String)".utf8)');
6666
});
6767
});
6868

0 commit comments

Comments
 (0)