Пока вы не предоставили достаточно информации, чтобы фактически указать, ГДЕ вы должны извлекать данные, вам нужно вытащить ее откуда-то. Вы можете указать URL-адрес в нагрузке, а также определить параметры данных или функцию обратного вызова.
$("#getCameraSerialNumbers").click(function () {
$("#step1Content").load('YourUrl');
});
httpurLConnection
является буферизацией данных, так что он может установить заголовок длиной содержимого
(на HTTP ).
Одна альтернатива, если ваш сервер назначения поддерживает его, должен использовать « переводы . Это будет буфер только небольшую часть данных за раз. Однако не все услуги поддерживают его (Amazon S3, например, не).
Еще одна альтернатива (и IMO лучшего) - использовать jakarta httpClient . Вы можете установить «Entity» в запросе из файла, а код подключения установит запрос заголовки соответствующим образом.
Редактировать: NOS прокомментировал, что OP может вызывать httpurlconnection.setfixedLenceStreamingMode (длинная длина)
. Я не знал об этом методе; Он был добавлен в 1,5, и я не использовал этот класс с тех пор.
Однако I все еще предлагает использовать Jakarta httpClient, по той простой причине, что это уменьшает объем кода, который должен поддерживать OP. Код, который является котельной, но все еще имеет потенциал для ошибок:
, наконец,
блок, и снова, поздравляю с этим. За исключением того, что либо из Close ()
вызовов может бросить IOException
, сохраняя другой от выполнения. И метод в целом броски исключение
, так что компилятор не поможет поймать подобные ошибки. Даже если OP идеально написал этот код, и изменить его в методы, аналогичными тем, кто в Джакарте ОБООН, / он не должен делать это . Этот код был написан и протестирован другими. Я знаю, что это трата моего время, чтобы переписать его и подозревать, что это пустая трата времени ОП.
Проблема в том, что класс httpurLConnection использует байтовый массив для хранения ваших данных. Предположительно, это видео вы нажимаете, принимает больше памяти, чем доступно. У вас есть несколько вариантов:
Увеличьте память к вашему приложению. Вы можете использовать опцию -xMX1024M, чтобы дать 1 ГБ памяти в ваше приложение. Это увеличит объем данных, которые вы можете хранить в памяти.
Если вы все еще заканчиваете память, вы можете рассмотреть возможность попробовать другую библиотеку, чтобы нажать видео вверх, что не хранит данные все в памяти одновременно. Apache Commons HttpClient имеет такую функцию. Смотрите этот сайт для получения дополнительной информации: http://hc.capache.org/httpclient-3.x/features.html . Смотрите этот раздел для многочастотной формы загрузки больших файлов: http://hc.capache.org/httpclient-3.x/methods/multipartpost.html
Для чего-либо, кроме основных GET-операций, встроенный java.net
HTTP-файл не очень хорош. Для этого рекомендуется использовать Apache Commons HttpClient. Он позволяет делать гораздо более интуитивные вещи, как например:
PutMethod put = new PutMethod(url);
put.setRequestEntity(new FileRequestEntity(localFile, contentType));
int responseCode = put.executeMethod();
, который заменяет много вашего кода boiler-пластинки.
Ваша проблема заключается в том, что вы пытаетесь исправить X Video Bytes в байт X / N ОЗУ, когда N> 1.
Вам либо нужно прочитать видео в меньший буфер И напишите его, как вы идете или сделаете файл меньше или увеличьте память, доступную для вашего процесса.
Проверьте размер кучи. Вы можете использовать -xmx, чтобы увеличить его, если вы приняли по умолчанию.