Sample code for 30+ languages & platforms
Dart

REST Send multipart/form-data

See more REST Examples

Demonstrates how to send a multipart/form-data HTTP request.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  final rest = CkRest();

  // Connect to the destination web server.
  final bTls = true;
  final port = 443;
  final bAutoReconnect = true;
  rest.connect('www.somewebserver.com', port, bTls, bAutoReconnect);

  // This example will send the following multipart/form-data request.
  // The Content-Length is automatically computed and added by Chilkat.
  // It will be different than what is shown here.
  // The boundary string is also generated by Chilkat and will be different
  // than shown below.

  // 	POST /some_path HTTP/1.1
  // 	Content-Type: multipart/form-data; boundary=---------------------------735323031399963166993862150
  // 	Content-Length: 834
  // 
  // 	-----------------------------735323031399963166993862150
  // 	Content-Disposition: form-data; name="text1"
  // 
  // 	text 123 abc
  // 	-----------------------------735323031399963166993862150
  // 	Content-Disposition: form-data; name="text2"
  // 
  // 	xyz
  // 	-----------------------------735323031399963166993862150
  // 	Content-Disposition: form-data; name="file1"; filename="a.txt"
  // 	Content-Type: text/plain
  // 
  // 	Content of a.txt.
  // 
  // 	-----------------------------735323031399963166993862150
  // 	Content-Disposition: form-data; name="file2"; filename="a.html"
  // 	Content-Type: text/html
  // 
  // 	<!DOCTYPE html><title>Content of a.html.</title>
  // 
  // 	-----------------------------735323031399963166993862150
  // 	Content-Disposition: form-data; name="file3"; filename="starfish.jpg"
  // 	Content-Type: image/jpeg
  // 
  // 	binary data goes here
  // 	-----------------------------735323031399963166993862150--

  // Set the Content-Type for the topmost MIME part.
  rest.addHeader('Content-Type', 'multipart/form-data');

  // Specify each part of the request.
  rest.partSelector = '1';
  rest.addHeader('Content-Disposition', 'form-data; name="text1"');
  rest.setMultipartBodyString('text 123 abc');

  rest.partSelector = '2';
  rest.addHeader('Content-Disposition', 'form-data; name="text2"');
  rest.setMultipartBodyString('xyz');

  rest.partSelector = '3';
  rest.addHeader('Content-Disposition', 'form-data; name="file1"; filename="a.txt"');
  rest.addHeader('Content-Type', 'text/plain');
  rest.setMultipartBodyString('Content of a.txt.');

  rest.partSelector = '4';
  rest.addHeader('Content-Disposition', 'form-data; name="file2"; filename="a.html"');
  rest.addHeader('Content-Type', 'text/html');
  final sbHtml = CkStringBuilder();
  sbHtml.loadFile('qa_data/html/a.html', 'utf-8');
  rest.setMultipartBodySb(sbHtml);

  rest.partSelector = '5';
  rest.addHeader('Content-Disposition', 'form-data; name="file3"; filename="starfish.jpg"');
  rest.addHeader('Content-Type', 'image/jpeg');
  final jpgBytes = CkBinData();
  jpgBytes.loadFile('qa_data/jpg/starfish.jpg');
  rest.setMultipartBodyBd(jpgBytes);

  final String responseBody;
  try {
    responseBody = rest.fullRequestMultipart('POST', '/some_path');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // ...
  // ...

  // Clear the REST object for any subsequent requests..
  rest.clearAllHeaders();
  rest.clearAllParts();
  rest.partSelector = '';
}