Требования: Реализуйте веб -страницу с функцией загрузки файлов, в основном загрузка сжатых пакетов и изображений:
1: Скачать через гиперссылку
На странице HTML ссылка на адрес файла, который будет загружен с помощью гиперссылки
<! Doctype html> <html> <head> <meta charset = "utf-8"> <Title> вставьте заголовок здесь </title> </head> <body> <h1> Загрузить файл через ссылку </h1> <a href = "/day06/download/cors.zip"> compression package </a> <a href = "/day06/cors.zip"> package </a> <a href = "/day06/day06/day06/day06/day06/day06/day06/cors.zip"> </body> </html>
Где Day06/Download - это путь документа, структура программы этого примера заключается в следующем:
После запуска программы вы можете скачать его, нажав на документ, который вам необходимо скачать.
Но здесь появится проблема, то есть, когда вы нажимаете, чтобы загрузить сжатый пакет, появится страница загрузки, но при загрузке картинки браузер напрямую откроет картинку, и загрузка не будет.
Это связано с тем, что при загрузке файла через гиперссылку, если браузер может распознать формат файла, браузер откроется напрямую. Загрузка будет достигнута только в том случае, если браузер не сможет распознать формат файла. Поэтому второй метод используется для реализации функции загрузки.
2: Реализация загрузки через программу сервлета
Принцип загрузки файлов через Сервлет состоит в том, чтобы прочитать целевую программу через Сервлет и вернуть ресурсы клиенту.
<! Doctype html> <html> <head> <meta charset = "utf-8"> <Title> вставьте заголовок здесь </title> </head> <body> <h1> Загрузить файл через ссылку </h1> <a href = "/day06/download/cors.zip"> compression package </a> <a href = "/day06/cors.zip"> package </a> <a href = "/day06/day06/day06/day06/day06/day06/day06/cors.zip"> <h1> Загрузить файл через программу сервиса </h1> <a href = "/day06/servletdownload? filename = cors.zip"> пакет сжатия </a> <a href = "/day06/servletdowd?
Где /day06 /servletdownload - это путь сопоставления программы сервлета, а затем создайте новый сервлет, название Servletdownload, а URL -адрес сопоставлен с /сервиз -загрузкой.
Добавьте код следующим образом:
пакет com.lsgjzhuwei.servlet.response; импортировать java.io.fileinputstream; Импорт java.io.fileOutputStream; импортировать java.io.ioexception; импортировать java.io.inputstream; импортировать java.io.outputstream; Импорт javax.servlet.servletexception; Импорт javax.servlet.annotation.webservlet; Импорт javax.servlet.http.httpservlet; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; /** * Класс реализации сервиса ServletDownload */@Webservlet (asyncSupported = true, urlPatterns = {"/servletdownload"}) public class servletdowload extends httpservlet {private static final long long lound worialversionuid = 1l; / ** * @see httpservlet#httpservlet () */ public servletdownload () {super (); // TODO Автогенерированный конструктор Stub}/** * @see httpservlet#doget (httpservletrequest, httpservletresponse response) */Защищенная void doget (httpservletrequest, httpsersersponse response) Имя файла string fileName = request.getParameter ("filename"); System.out.println (имя файла); // Установить файл тип mime response.setContentType (getServletContext (). GetMimeType (имя файла)); // Установить ответ на дискуссию содержимого.setheader ("Содержимое-дискуссии", "Приложение; filename ="+filename); // Читать целевой файл и написать целевой файл клиенту через ответ // Получить абсолютный путь целевого файла строки fullfilEname = getServletContext (). GetRealPath ("/скачать/" + файл); //System.out.println(fullfilename); // Читать файл inputstream in = new FileInputStream (FullFileName); OutputStream out = response.getOutputStream (); // запись файла int b; while ((b = in.read ())! = -1) {out.write (b); } in.close (); out.close (); } / ** * @see httpservlet#dopost (httpservlectrequest, httpservletresponse response) * / protected void dopost (httpservletrequest, httpservletrespons Перезагрузите сервер Tomcat, чтобы реализовать сжатые пакеты и картинки.
Три. Советы:
Способ загрузки файлов очень просто нажать на ссылку. Фон выводит поток файла и реализует функцию загрузки через браузер, включая запросы о местоположении и хранилище файлов. Большинство браузеров будут настраивать фиксированное местоположение и могут не спрашивать каждый раз.
Фронт-энд очень прост, с тегом <a>, href = "Адрес ответного метода". Если ваши потребности не могут быть непосредственно использованы в режиме гиперссылки, вы можете написать windo.location.href = "Адрес ответного метода" в JS.
После перехода на метод справочной
String filePath = this.getClass (). GetClassLoader (). GetResource (""). Touri (). GetPath () + "/exportpdf.pdf"; // Путь файла в файле проекта outfile = new File (filePath); String fileName = outFile.getName (); // Получить имя файла inputStream fis = new BufferedInputStream (new FileInputStream (filePath)); byte [] buffer = new Byte [fis.aveable ()]; fis.read (buffer); // Чтение потока файла fis.close (); response.reset (); // сбросить ответ набора результатов. ADDHeader ("Content-Disposition", "Attachment; filename =" + new String (filename.replaceall ("", "") .getbytes ("utf-8"), "iso8859-1")); // возвращать имя файла заголовка. // вернуть размер файла заголовка. // Установите тип данных // Получить выходной корпус возвращаемого корпуса вправо outputStream OS = new BufferedOutputStream (response.getOutputStream ()); Os.Write (буфер); // выходной файл os.flush (); os.close (); Браузер напрямую распознает эту форму вывода файла, и появляется диалоговое окно.
Обратите внимание, что этот метод должен быть скорректирован в фоновом режиме с использованием метода ссылки. Невозможно использовать методы Ajax и Xmlhttprequest. Таким образом, возвращаемый поток файлов будет возвращен в функцию обратного вызова метода. Конечно, если вы хотите получить файл в JS, это будет работать.