Примеры в этой статье делятся кодом для загрузки точек останова Java для вашей ссылки. Конкретный контент заключается в следующем
1. Java Code
// реализация файла загрузки file () {file dir = new File (filePath); // Получить путь к файлу if (! Dir.exists ()) {System.out.println ("Ошибка пути файла"); log.debug ("ошибка пути файла"); вернуть "не удастся"; // Направление, существует ли файл или папка} file Downloadfile = new File (dir, filename); // ищите файл if (! dir.isfile ())) {System.out.println ("Файл не существует"); log.debug ("файл не существует"); вернуть "не удастся"; // определить, существует ли файл или папка} try {downloadfileranges (downloadfile); } catch (clientAbortException e) {System.out.println ("Подключение к прекращению"); log.debug ("подключение к прекращению"); } catch (ioException e) {e.printstackTrace (); } return null; } private void DownloadFileranges (файл downloadfile) Throws ioException {// размер файла для загрузки long fileLength = downloadfile.length (); // Размер файла скачал давно проста = 0; // Скачать ли экспресс -поезд, иначе это гром или другой логический isflashget = true; // используется для записи количества конечных байтов, которые необходимо загрузить (гром или другие загрузки) long lenend = 0; // используется для записи строки диапазона данных, требуемой клиентом для загрузки string rangebytes = request.getheader ("range"); // используется для случайного чтения и записи файлов randomaccessfile raf = null; OutputStream OS = null; OutputStream output = null; байт B [] = новый байт [1024]; // Если запрос загрузки клиента содержит диапазон if (null! = Rangebytes) {// return код 206 response.setStatus (httpservletresponse.sc_partial_content); rangeBytes = request.getheader ("range"). Replaceall ("bytes =", ""); // Судья range string mode if (rangebytes.indexof (' -') == rangebytes.length () - 1) {// Нет конечного номера байта, быстрый isflashget = true; RangeBytes = rangeBytes.substring (0, rangeBytes.indexof ('-')); PastLength = long.parselong (rangeBytes.trim ()); } else {// Thunder Download isflashget = false; String startBytes = rangeBytes.subString (0, rangeBytes.indexof ('-')); String endbytes = rangeBytes.substring (rangeBytes.indexof ('-') + 1, rangeBytes.length ()); // Скачанный сегмент файлов pastLength = long.parselong (startBytes.trim ()); // количество файловых байтов, которые необходимо загрузить (запуск с загруженного сегмента файлов) lenend = long.parselong (endbytes); }} // Уведомление клиента разрешить непрерывно передавать точки останова, формат ответа: accept-ranges: bytes response.setheader («Принятия-диапазоны», «байты»); // response.reset (); // Если это первая загрузка, статус по умолчанию на 200, а формат ответа: http/1.1 200 ok if (0! = Pastlength) {// ляточный диапазон содержимого строки contentrange = ""; // Формат ответа // Содержимое range: байты [начальный байт блока файла]-[общий размер файла-1] || .append ("/"). Append (new Long (filelength) .toString ()) .toString (); } else {contentRange = new StringBuffer (RangeBytes) .append ("/") .append (new Long (fileLength) .toString ()). ToString (); } response.setheader ("content-range", contentrange); } String fileName = getDownloadChineseFilename (filename); response.setheader («Содержание-распределение», «Приложение; файл alename =" + filename + ""); // формат ответа: response.setContentType («Приложение/октет-потоп»); Response.addheader ("content-dength", string.valueof (filelength)); try {os = response.getOutputStream (); output = new BufferedOutputStream (OS); raf = new randomaccessfile (downloadfile, "r"); // пропустить загруженные байты raf.seek (pastlegene); if (isflashget) {// Express etc int n = 0; while ((n = raf.read (b, 0, 1024))! = -1) {output.write (b, 0, n); }} else {// Thunder etc while (raf.getFilePointer () <lenend) {output.write (raf.read ()); }} output.flush (); } catch (ioException e) { /*** При написании данных, такие исключения, как ClientAbortException*, потому что клиент отменяет загрузку, а сервер продолжает записывать данные в браузер. Это нормально. Особенно для кровеносного клиентского программного обеспечения, такого как Thunder. * Очевидно, что байты считывания потока = 1275856879-1275877358. * Если чтение не будет завершено в течение короткого периода времени, Гром снова начнет вторую и третью. Полем Полем Поток считывает тот же байт -сегмент, пока один поток не завершит чтение. Гром убьет * другие потоки, которые загружают тот же сегмент байта, насильственно прервит чтение байтов, заставляя сервер выбрасывать ClientAbortException. * Итак, мы игнорируем это исключение*/}, наконец, {if (output! = Null) {output.close (); } if (raf! = null) {raf.close (); }}} частная строка getDownloadChineseFilename (String paramname) {String DownloadChineseFilename = ""; "; try {downloadChineseFilename = new String (paramname.getBytes ("gbk"), "iso8859-1"); } catch (unsupportEncodingexception e) {e.printstacktrace (); } return DownloadChineseFilename; } public String getFilePath () {return filePath; } public void setFilePath (String filePath) {this.filePath = filePath; } public String getFilEname () {return filename; } public void setFileName (String fileName) {this.filename = filename; } public httpservletRequest getRequest () {return запрос; } public httpservletresponse getResponse () {return response; } 2. Раздел стойки <br /> Скопируйте код следующим образом: <name Action = "downloadfile" method = "downloadfile">
<Результат name = "Неудача" type = "redirectaction"> Showdownloadfilenamelist </result>
</action>
3. JSP Part
Кода кода выглядит следующим образом: <Td> <a href = "Downloadfile? Filename = $ {fileMap.key} && filePath = $ {fileMap.value}"> Загрузка файла </a> </td>