Как я могу загрузить большой файл кусками, используя Java? - PullRequest
5 голосов
/ 20 мая 2011

Мне нужно загрузить большой файл кусками, используя Java.

Есть ли какой-нибудь пример кода, к которому я могу обратиться?

Ответы [ 6 ]

3 голосов
/ 08 апреля 2015

* Это можно сделать с помощью plupload.Вот образец.Мой index.html выглядит так: -

<code>    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>Upload</title>
    <!-- production -->
    <script type="text/javascript" src="js/plupload.full.min.js"></script>
    <!-- debug 
    <script type="text/javascript" src="../js/moxie.js"></script>
    <script type="text/javascript" src="../js/plupload.dev.js"></script>
    -->
    </head>
    <body style="font: 13px Verdana; background: #eee; color: #333">
    <div id="filelist"></div>
    <br />
        <button id="pickfiles" >Select file</button> 
        <button id="uploadfiles" >Upload</button>
        <div id="container">
    </div>
    <br />
    <pre id="console">
0 голосов
/ 28 августа 2018

Вот пример нативного кода Java, который загружает файл, используя куски:

final String       LF = "\r\n"; // Line separator required by multipart/form-data. Can be static class constant
final String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value.

HttpURLConnection connection = (HttpURLConnection) new URL("http://some.com/upload").openConnection();
try {
    connection.setDoOutput(true);
    connection.setChunkedStreamingMode(4096);
    connection.setRequestMethod("POST");
    connection.addRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
    connection.addRequestProperty("Accept", "application/json");
    connection.addRequestProperty("Authorization", myToken);
    try (OutputStream os = connection.getOutputStream();
            Writer writer = new OutputStreamWriter(os, StandardCharsets.UTF_8)) {
        writer.append("--").append(boundary).append(LF);
        writer.append("Content-Disposition: form-data; name=\"dataFile\"; filename=\"file.zip\"").append(LF);
        writer.append("Content-Type: application/zip").append(LF);
        writer.append(LF);
        writer.flush();

        // Write body
        writeBinaryBody(os);
        writer.append(LF).append("--").append(boundary).append("--").append(LF);
        writer.flush();
        os.flush();
    }
    if (200 != connection.getResponseCode()) {
        try (Reader reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)) {
            // Handle error here
        }
    }
} finally {
    connection.disconnect();
}

Код в этом примере основан на этом ответе о загрузке http-файла из Java. Разница заключается в вызове connection.setChunkedStreamingMode(4096);, который определяет использование потоковой передачи по частям.

0 голосов
/ 14 января 2018

Если вы используете Java, используйте зависимость gradle Arivus Nioserver -> compile 'org.arivu: nioserver: 1.0.3'. Нет ограничений по размеру файла.

0 голосов
/ 20 мая 2011

Попробуйте Загрузка Apache Commons .Он поддерживает потоковую передачу, может быть подходящим для вас.

0 голосов
/ 20 мая 2011

Вы можете просто разбить файл самостоятельно, отправить его с помощью API Socket и заново собрать файл.

0 голосов
/ 20 мая 2011

Использовать RandomAccessFile. Я уже верю, что это уже освещено.

Ввод Java-файла с возможностью перемотки () / сброса ()

По сути, вы просто стремитесь к отправной точке, пишете оттуда столько байтов, сколько хотите, и помните точку, с которой вы прекратили писать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...