Multipart
This doc details what emitters will generate for multipart request.
Common multipart request
When content-type of operation is “multipart/form-data”, the body payload is multipart payload.
model Address { city: string;}model MultipartRequest { id: string; address: Address; profileImage: bytes; pictures: bytes[];}
@postop upload( @header contentType: "multipart/form-data", @body body: MultipartRequest,): NoContentResponse;
class MultipartRequest: id: str = rest_field() address: "Address" = rest_field() profile_image: FileType = rest_field(name="profileImage", is_multipart_file_input=True) pictures: List[FileType] = rest_field(is_multipart_file_input=True)
def upload( self, body: Union[_models.MultipartRequest, JSON], **kwargs: Any) -> None:
//model classpublic partial class MultipartRequest{ public string Id { get; } public Address Address { get; } public Stream ProfileImage { get; } public IList<Stream> Pictures { get; }}
//protocol methodpublic virtual async Task<Response> Upload(RequestContent content, string contentType, RequestContext context = null);
//convenience methodpublic virtual Response Upload(MultipartRequest body, CancellationToken cancellationToken = default)
// RLC models (multipart part descriptors)
export interface MultipartRequestIdPartDescriptor { name: "id"; body: string;}
export interface MultipartRequestAddressPartDescriptor { name: "address"; body: Address;}
export interface MultipartRequestProfileImagePartDescriptor { name: "profileImage"; body: string | Uint8Array | ReadableStream<Uint8Array> | NodeJS.ReadableStream | File; filename?: string; contentType?: string;}
export interface MultipartRequestPicturesPartDescriptor { name: "pictures"; body: string | Uint8Array | ReadableStream<Uint8Array> | NodeJS.ReadableStream | File; filename?: string; contentType?: string;}
export interface Address { city: string;}
export type MultipartRequest = | FormData | Array< | MultipartRequestIdPartDescriptor | MultipartRequestAddressPartDescriptor | MultipartRequestProfileImagePartDescriptor | MultipartRequestPicturesPartDescriptor >;
// RLC parameters
export interface UploadBodyParam { body: MultipartRequest;}
export interface UploadMediaTypesParam { contentType: "multipart/form-data";}
export type UploadParameters = UploadMediaTypesParam & UploadBodyParam & RequestParameters;
// RLC operations
export interface Upload { post(options: UploadParameters): StreamableMethod<Upload204Response>;}
export interface Routes { /** Resource for '/' has methods for the following verbs: post */ (path: "/"): Upload;}
// Model class@Immutablepublic final class MultipartRequest { public MultipartRequest(String id, Address address, ProfileImageFileDetails profileImage, List<PicturesFileDetails> pictures);}
// Client APIpublic void upload(MultipartRequest body);
Multipart request with @multipartBody
With @multipartBody
, typespec author could define part of multipart request with more detailed info.
For example, typespec author could use File
model predefined in @typespec/http
to declare the requiredness of filename and
contentType.
model Address { city: string;}model MultipartRequest { id: HttpPart<string>; address: HttpPart<Address>; profileImage: HttpPart<File>; previousAddresses: HttpPart<Address[]>; pictures: HttpPart<File>[];}
@postop upload( @header contentType: "multipart/form-data", @multipartBody body: MultipartRequest,): NoContentResponse;
class MultipartRequest: id: str = rest_field() address: "Address" = rest_field() profile_image: FileType = rest_field(name="profileImage", is_multipart_file_input=True) pictures: List[FileType] = rest_field(is_multipart_file_input=True)
def upload( self, body: Union[_models.MultipartRequest, JSON], **kwargs: Any) -> None:
// Not yet implemented. See issues:// - RLC: https://github.com/Azure/autorest.typescript/issues/2568// - Modular: https://github.com/Azure/autorest.typescript/issues/2422
// Model class@Immutablepublic final class MultipartRequest { public MultipartRequest(String id, Address address, FileDetails profileImage, List<Address> previousAddresses, List<FileDetails> pictures);}
// Client APIpublic void upload(MultipartRequest body);