Есть два типа загрузки веб -файлов. Одним из них является то, что файл находится в каталоге веб -сайтов. Вы можете скачать его, непосредственно введя путь к файлу в браузере, такой как http://www.xxx.com/file.zip. Другой тип заключается в том, что файл не находится в каталоге веб -сайта, или файл генерируется динамически (отчеты об экспорте или экспорт Excel и т. Д.). В этом случае загрузка файла должна быть достигнута с помощью OutputStream ответа. DownloadUtils - это класс инструментов для загрузки веб -файлов Java, который предоставляет различные статические методы для реализации загрузки файлов.
пакет com.rhui.util; Импорт java.io.bufferedinputstream; Импорт java.io.bufferedOutputStream; Импорт java.io.file; импортировать java.io.fileinputstream; импортировать java.io.ioexception; импортировать java.io.inputstream; импортировать java.io.outputstream; импортировать java.net.urlencoder; Импорт javax.servlet.http.httpservletresponse; Импорт org.apache.commons.lang3.stringutils; / *** Загрузка файла класс*/ public class DownloadUtils {/ *** Загрузка файла Кодирование* Это кодирование сообщает браузеру метод кодирования имени файла, чтобы предотвратить искаженную код при загрузке китайских имен файлов*/ private Static String Encoding = "UTF-8"; / *** Загрузка файла* @param response* @param filepath Путь файла на сервере, включая имя файла*/ public static void загрузка (httpservletresponse response, string filepath) {file file = new file (filepath.tostring ()); Скачать (ответ, файл, ноль, кодирование); } /*** Загрузить файл* @param response* @param filepath Путь файла на сервере, включая имя файла* @param filename Имя файла, загруженного в браузер. Если вы не хотите, чтобы имя файла загружалось браузером, так же, как имен файла на сервере, установите этот параметр */ public static void загрузку (httpservletresponse, string filePath, String fileName) {file file = new File (filePath.toString ()); Скачать (ответ, файл, имя файла, кодирование); } /*** Загрузить файл* @param response* @param filepath Путь файла на сервере, включая имя файла* @param filename Имя файла, загруженного в браузер. Если вы не хотите, чтобы имя файла было загружено браузером, так же, как имен файла на сервере, установите этот параметр* @param кодирование файла Кодирование*/ public static void загрузка (httpservletresponse response, string filepath, string filename, string incoding) {file file = filepath.tostring ()); Скачать (ответ, файл, имя файла, кодирование); } /** * Загрузка файла * @param response * @param файл файла * @param filename Имя файла, загруженного в браузер. Если вы не хотите, чтобы имя файла загружалось браузером, так же, как имен файла на сервере, установите этот параметр */ public static void Download (httpservletresponse ответ, файл файла) {загрузка (ответ, файл, нулевый, кодирование); } /*** Загрузка файла* @param response* @param файл файла* @param filename Имя файла, загруженного в браузер. Если вы не хотите, чтобы имя файла загружалось браузером на сервер, установите этот параметр */ public static void Download (httpservletresponse ответ, файл, строковый файл) {Загрузить (ответ, файл, файл, кодирование); } /*** Загрузка файла* @param response* @param файл файла* @param filename Имя загруженного файла в браузер. Если вы не хотите, чтобы имя файла загружалось браузером, так же, как имя файла на сервере, установите этот параметр* @param кодирование кодирования файла Кодирование*/ public static void загрузку (httpservletresponse response, файл файл, string filename, string encoding) {if (file = null ||! File.exists () || файл. } // Если вы не указали имя файла для загрузки в браузер, используйте имя по умолчанию файла if (stringUtils.isblank (filename)) {filename = file.getName (); } try {inputStream IS = new FileInputStream (file); Скачать (ответ, IS, имя файла, кодирование); } catch (ioException e) {e.printstackTrace (); }} / *** Загрузка файла* @param response* @param - это поток ввода файла* @param filename загруженное имя файла* @throws ioexception* / public static void загрузка (httpservletresponse response, inputstream is, string filename) {download (ответ, IS, filename, incoding); } / *** Загрузка файла* @param response* @param - это поток ввода файла* @param filename скачанный имя файла* @param кодирование кодирования формата* / public static void скачать (httpservletresponse response, inputstream is, string filename, string incoding) {if is = null || stringslance (filename) {if (is = null || stringslanc. } BufferedInputStream bis = null; OutputStream OS = null; BufferedOutputStream bos = null; try {bis = new BufferedInputStream (IS); OS = response.getOutputStream (); bos = new BufferedOutputStream (OS); response.setContentType ("Приложение/Octet-Stream; charset =" + кодирование); response.setcharacterencoding (кодирование); response.setheader ("Distosition", "Attachment; filename ="+ urlencoder.encode (имя файла, кодирование)); Byte [] buffer = новый байт [1024]; int len = bis.read (buffer); while (len! = -1) {bos.write (буфер, 0, len); len = bis.read (буфер); } bos.flush (); } catch (ioException e) {e.printstackTrace (); } наконец {if (bis! = null) {try {bis.close (); } catch (ioException e) {}} if (is! = null) {try {as.close (); } catch (ioException e) {}}}} public static String getEncoding () {return Encoding; } public static void setencoding (string encoding) {downloadUtils.encoding = eNcoding; }}Если файл сохраняется в каталоге без сайта на сервере
String filePath = "c: //file.zip"; Downloadutils.download (ответ, FilePath);
Если файл является потоком ввода
// - это поток ввода файла // filename - это имя файла, загруженное браузером // Кодирование, является именем файла, чтобы предотвратить искаженные коды, когда в файле string string fileName = "file.zip"; String encoding = "utf-8"; Downloadutils.download (ответ, IS, имя файла, кодирование);
Скачать файлы в сервлете
пакет com.rhui.web.servlet; импортировать java.io.ioexception; Импорт javax.servlet.servletexception; Импорт javax.servlet.annotation.webservlet; Импорт javax.servlet.http.httpservlet; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; импорт com.rhui.util.downloadutils; @Webservlet ("/download/servlet") public class downloadservlet расширяет httpservlet {private static final long serialversionuid = 1l; Защищенная служба void (httpservlectrequest, httpservletresponse response) Throws ServletException, ioException {String filePath = "c: //file.zip"; Downloadutils.download (ответ, FilePath); }} PS: Скачать картинки (включая функцию противоугонки ссылки)
Пакет cn.itcast.day06.web.servlet; Импорт java.io.ioexception; импорт java.io.inputstream; импорт java.io.outputstream; импорт java.net.urlencoder; Импорт javax.servlet.servletcontext; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; импорт javax.servlet.http.httpservletrequest; импорт javax.servlet.htp.httpservelcesponse; Public Class DownloadServlet расширяет httpservlet {public void doget (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {// Реализация функции против кражки // Получить заголовок рефериста, чтобы объяснить, откуда посетитель поступает строки request.getheader («Рефератор»); if (referer == null ||! referer.startswith ("http: // localhost")) {// Это ссылка на вор response.sendredirect ("/day06/index.jsp"); возвращаться ; } // Решить проблему ответа китайского искаженного ответа. // Установить кодирование тела сообщения // Заголовок ответа HTTP, отправленный через протокол HTTP, не может появиться на китайском китайском языке, китайцы должны быть URL-кодированием строкового файла = urlencoder.encode ("beauty.jpg", "UTF-8"); // Уведомить браузер для чтения ресурса. // Читать данные изображения и отправить его в строку браузера IE webpath = "/download/beauty.jpg"; // эквивалент пути текущего веб -приложения ServletContext ServletContext = super.getServletContext (); InputStream in = ServletContext.getResourCeasStream (WebPath); OutputStream out = response.getOutputStream (); int len; Byte [] buffer = новый байт [1024]; while ((len = in.read (buffer))! =-1) out.write (buffer, 0, len); } public void Dopost (httpservletRequest, httpservletresponse response) Throws ServletException, ioException {Doget (запрос, ответ); }}