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.

1 Answer 1


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.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .