1

I'm trying to post a file to a rest API and the code I'm using gives an "Early EOF" error. I've looked around and most of what I'm seeing seems to suggest that the data send doesn't match the expected size of what is being sent.

How do I fix this?

Code is shown below: (based on How can I make a multipart/form-data POST request using Java?)

import java.io.File;
import java.io.FileInputStream;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class HttpFileUpload {

    public static void main(String[] args) throws Exception {
        log.info("Starting...");
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost uploadFile = new HttpPost("https://url-to-rest-api/api/2.0/dbfs/put");
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();

        builder.addTextBody("path", "/FileStore/my-dir/myfilename.txt", ContentType.TEXT_PLAIN);
        String token = "my-security-token";
        
        // This attaches the file to the POST:
        File f = new File("C:\\path-to\\my-file.txt");
        builder.addBinaryBody(
                "file",
                new FileInputStream(f),
                ContentType.APPLICATION_OCTET_STREAM,
                f.getName());

        HttpEntity multipart = builder.build();
        uploadFile.addHeader("Authorization", "Bearer " + token);
        uploadFile.setEntity(multipart);
        log.info("Starting upload");
        CloseableHttpResponse response = httpClient.execute(uploadFile);
        log.info("Done with upload");
        HttpEntity responseEntity = response.getEntity();
        log.info("Got response");
        log.info("Done.");
    }

}
John
  • 3,458
  • 4
  • 33
  • 54

1 Answers1

0

This turned out to be a timeout issue. The api I was writing to timed out the request and generated the EOF exception. The api had another call that allowed the file to be uploaded in segments so I modified my solution to use this call instead of trying to upload the entire file in one call.

John
  • 3,458
  • 4
  • 33
  • 54