簡體   English   中英

Java 8:如何為 POST 請求分塊多部分文件

[英]Java 8: How to chunk multipart file for POST request

我有一個多部分文件,它將是一個圖像或視頻,需要對 POST 請求進行分塊。 如何將文件分塊為字節數組段?

編輯:我使用 Twitter API 上傳圖片,根據他們的文檔,媒體必須分塊

感謝https://www.baeldung.com/2013/04/04/multipart-upload-on-s3-with-jclouds/ ,我找到了解決方案

public final class MediaUtil {

    public static int getMaximumNumberOfParts(byte[] byteArray) {
        int numberOfParts = byteArray.length / (1024 * 1024); // 1MB
        if (numberOfParts == 0) {
            return 1;
        }
        return numberOfParts;
    }

    public static List<byte[]> breakByteArrayIntoParts(byte[] byteArray, int maxNumberOfParts) {
        List<byte[]> parts = new ArrayList<>();
        int fullSize = byteArray.length;
        long dimensionOfPart = fullSize / maxNumberOfParts;
        for (int i = 0; i < maxNumberOfParts; i++) {
            int previousSplitPoint = (int) (dimensionOfPart * i);
            int splitPoint = (int) (dimensionOfPart * (i + 1));
            if (i == (maxNumberOfParts - 1)) {
                splitPoint = fullSize;
            }
            byte[] partBytes = Arrays.copyOfRange(byteArray, previousSplitPoint, splitPoint);
            parts.add(partBytes);
        }

        return parts;
    }
}

// Post the request
int maxParts = MediaUtil.getMaximumNumberOfParts(multipartFile.getBytes());

List<byte[]> bytes = MediaUtil.breakByteArrayIntoParts(multipartFile.getBytes(), maxParts);
int segment = 0;
for (byte[] b : bytes) {
    // POST request here
    segment++;
}

好吧,你可能需要這個:

File resource = ResourceUtils.getFile(path);
if (resource.isFile()) {
    byte[] bytes = readFile2Bytes(new FileInputStream(resource));
}





private byte[] readFile2Bytes(FileInputStream fis) throws IOException {

    int length = 0;
    byte[] buffer = new byte[size];
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    while ((length = fis.read(buffer)) != -1) {
        baos.write(buffer, 0, length);
    }
    return baos.toByteArray();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM