I'm trying to upload a file to Chatter files using the REST API but I'm getting the following error :

Binary data included but file attachment information is missing. If providing rich JSON/XML input in multipart REST, make sure to include Content-Type header in the part.

here's the related code :

Part[] parts = {
            new StringPart("fileName", "Test.7z"),
            new StringPart("Content-Type","multipart/form-data;  boundary=boundary_string"),
            new FilePart("feedItemFileUpload", newContentFile)        

I tried with Content-Type : application/json; charset=UTF-8 but it doesn't change anything.


Here is some Java code that uploads Attachments that you may be able to use as a starting point:

package com.claimvantage.ant;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.PartBase;

public class AttachmentExample {

    private class JsonPart extends PartBase {

        private byte[] bytes;

        public JsonPart(String name, String json) throws IOException {
            super(name, "application/json", "UTF-8", null);
            this.bytes = json.getBytes("UTF-8");

        protected void sendData(OutputStream os) throws IOException {

        protected long lengthOfData() throws IOException {
            return bytes.length;

    private String baseUrl;     // Initialization not shown here
    private String sessionId;   // Initialization not shown here

     * Create attachment SObject from its JSON populating its Body from a file at the same time.
    public void createAttachment(String attachmentJson, File attachmentFile) throws Exception {

        PostMethod post = new PostMethod(baseUrl + "/services/data/v23.0/sobjects/Attachment");
        post.setRequestHeader("Authorization", "OAuth " + sessionId);
        Part[] parts = new Part[] {
                new JsonPart("Json", attachmentJson),
                new FilePart("Body", attachmentFile)
        post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams()));
        try {
            new HttpClient().executeMethod(post);
            if (post.getStatusCode() == HttpStatus.SC_CREATED) {
                // Logic for OK
            } else {
                // Error handling logic
        } finally {

A few more details here.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.