All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.dongliu.cute.http.body.MultiPartBody Maven / Gradle / Ivy

The newest version!
package net.dongliu.cute.http.body;

import net.dongliu.cute.http.ContentType;

import java.net.http.HttpRequest.BodyPublisher;
import java.net.http.HttpRequest.BodyPublishers;
import java.util.ArrayList;
import java.util.List;

import static java.nio.charset.StandardCharsets.US_ASCII;

/**
 * MultiPart post body
 *
 * @author Liu Dong
 */
class MultiPartBody extends AbstractBody>> {
    private static final String BOUNDARY = "********************" + System.currentTimeMillis();
    private static final ContentType contentType = ContentType.multiPart(BOUNDARY);
    private static final String LINE_END = "\r\n";

    MultiPartBody(List> body) {
        super(body, contentType);
    }

    @Override
    public BodyPublisher asBodyPublisher() {
        List publishers = new ArrayList<>();
        for (Part part : body()) {
            publishers.add(BodyPublishers.ofString("--" + BOUNDARY + LINE_END, US_ASCII));

            String header = part.headerData();
            publishers.add(BodyPublishers.ofString(header, US_ASCII));

            publishers.add(part.asPublisher());

            publishers.add(BodyPublishers.ofByteArray(LINE_END.getBytes()));
        }
        publishers.add(BodyPublishers.ofString("--" + BOUNDARY + "--" + LINE_END, US_ASCII));
        return new AggregateBodyPublisher(publishers);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy