Skip to content

Commit 26d18e1

Browse files
committed
fix malformed body and include additional optional data
1 parent e12b561 commit 26d18e1

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

packages/abstractions/src/multipartBody.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export class MultipartBody implements Parsable {
3131
partName: string,
3232
partContentType: string,
3333
content: T,
34+
additionalKV: {[key: string]: string} | undefined,
3435
serializationCallback?: ModelSerializerFunction<Parsable>,
3536
): void {
3637
if (!partName) throw new Error("partName cannot be undefined");
@@ -43,6 +44,7 @@ export class MultipartBody implements Parsable {
4344
contentType: partContentType,
4445
content,
4546
originalName: partName,
47+
additionalKV: additionalKV,
4648
serializationCallback,
4749
};
4850
}
@@ -94,6 +96,7 @@ interface MultipartEntry {
9496
contentType: string;
9597
content: any;
9698
originalName: string;
99+
additionalKV: {[key: string]: string} | undefined;
97100
serializationCallback?: ModelSerializerFunction<Parsable>;
98101
}
99102

@@ -128,13 +131,18 @@ export function serializeMultipartBody(
128131
writer.writeStringValue(undefined, "--" + boundary);
129132
const part = parts[partName];
130133
writer.writeStringValue("Content-Type", part.contentType);
134+
let dispositionValue = 'form-data; name="' + part.originalName + '"';
135+
if(part.additionalKV && Object.keys(part.additionalKV).length) {
136+
const additionalString = Object.entries(part.additionalKV).map(([k, v]) => `${k}="${v}"`).join("; ");
137+
dispositionValue += "; " + additionalString;
138+
}
131139
writer.writeStringValue(
132140
"Content-Disposition",
133-
'form-data; name="' + part.originalName + '"',
141+
dispositionValue,
134142
);
135143
writer.writeStringValue(undefined, "");
136144
if (typeof part.content === "string") {
137-
writer.writeStringValue(undefined, part.content);
145+
writer.writeStringValue(undefined, part.content, false);
138146
} else if (part.content instanceof ArrayBuffer) {
139147
writer.writeByteArrayValue(undefined, new Uint8Array(part.content));
140148
} else if (part.content instanceof Uint8Array) {

packages/abstractions/src/serialization/serializationWriter.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export interface SerializationWriter {
1919
* @param key the key to write the value with.
2020
* @param value the value to write to the stream.
2121
*/
22-
writeStringValue(key?: string | undefined, value?: string | undefined): void;
22+
writeStringValue(key?: string | undefined, value?: string | undefined, newline?: boolean): void;
2323
/**
2424
* Writes the specified boolean value to the stream with an optional given key.
2525
* @param key the key to write the value with.

packages/serialization/multipart/src/multipartSerializationWriter.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export class MultipartSerializationWriter implements SerializationWriter {
3232
public onStartObjectSerialization:
3333
| ((value: Parsable, writer: SerializationWriter) => void)
3434
| undefined;
35-
public writeStringValue = (key?: string, value?: string): void => {
35+
public writeStringValue = (key?: string, value?: string, newline: boolean = true): void => {
3636
if (key) {
3737
this.writeRawStringValue(key);
3838
}
@@ -42,7 +42,9 @@ export class MultipartSerializationWriter implements SerializationWriter {
4242
}
4343
this.writeRawStringValue(value);
4444
}
45-
this.writeRawStringValue("\r\n");
45+
if(newline) {
46+
this.writeRawStringValue("\r\n");
47+
}
4648
};
4749
private writeRawStringValue = (value?: string): void => {
4850
if (value) {

0 commit comments

Comments
 (0)