1. Самый прямой и простой способ — поместить адрес файла непосредственно в ссылку на html-странице. Недостатком этого является то, что путь к файлу на сервере открыт, и другие элементы управления (например, разрешения) при загрузке файлов не могут быть выполнены. Я не буду здесь писать пример.
2. На стороне сервера файл преобразуется в выходной поток, записывается в ответ и вместе с ответом передается в браузер. Браузер запрашивает у пользователя, желает ли он сохранить файл локально. (пример ниже)
<%
response.setContentType(fileminitype);
response.setHeader("Местоположение",имя файла);
response.setHeader("Cache-Control", "max-age=" +cacheTime);
response.setHeader("Content-Disposition", "attachment; filename=" + filename); //имя файла должно быть закодировано (utf-8)
ответ.setContentLength(длина файла);
OutputStream outputStream = response.getOutputStream();
InputStream inputStream = новый FileInputStream (путь к файлу);
буфер байт[] = новый байт[1024];
интервал я = -1;
while ((i = inputStream.read(buffer)) != -1) {
outputStream.write(буфер, 0, я);
}
выходной поток.flush();
выходной поток.закрыть();
inputStream.close();
выходной поток = ноль
%>;
3. Поскольку это JSP, другой способ — использовать Applet для загрузки файлов. Однако клиент должен сначала довериться вашему апплету Applet, который примет поток данных, отправленный сервлетом, и запишет его локально.
пример на стороне сервлета
публичная недействительная служба (требование HttpServletRequest, разрешение HttpServletResponse)
выдает ServletException, IOException {
res.setContentType("текст/обычный");
OutputStream outputStream = null;
пытаться {
выходной поток = res.getOutputStream();
popFile(srcFile, outputStream));//Записываем файл с путем к файлу srcFile в выходной поток.
} catch (IOException e) {
е.printStackTrace();
}
}
Пример стороны JApplet
URLConnection con;
пытаться {
con = url.openConnection();//url — это URL-адрес вызываемого сервлета, например http://localhost:8080/sendDateSevlet.do
con.setUseCaches(ложь);
con.setDoInput(истина);
con.setDoOutput(истина);
con.setRequestProperty("Тип контента",
"приложение/октет-поток");
InputStream in = con.getInputStream();
ProgressMonitorInputStream pmInputStream = новый ProgressMonitorInputStream(
панель «Загрузка содержимого файла с сервера», в);
ProgressMonitor pMonitor = pmInputStream
.getProgressMonitor();
pMonitor.setMillisToDecideToPopup(3);
pMonitor.setMillisToPopup(3);
String localfilepath = localstr + filename;//localfilepath локальный путь, папка файла localstr, имя файла имя локального файла
if(saveFilsaveFilee(localfilepath,pmInputStream)){ //Метод saveFilsaveFilee записывает входной поток pmInputStream в файл localfilepath.
openLocalFile (путь к локальному файлу);
}
4. Кстати, код JApplet для загрузки файлов тоже выложен.
Пример на стороне JApplet
URLConnection con;
пытаться {
con = url.openConnection();//url — это URL-адрес вызываемого сервлета, например http://localhost:8080/sendDateSevlet.do
con.setUseCaches(ложь);
con.setDoInput(истина);
con.setDoOutput(истина);
con.setRequestProperty("Тип контента",
"приложение/октет-поток");
OutputStream out = con.getOutputStream();
String localfilepath = localstr + filename // локальный путь к локальному файлу, папка с файлом localstr, имя файла имя локального файла;
getOutputStream(localfilepath,out); //Файл getOutputStream записывает файл localfilepath в выходной поток.
InputStream in = con.getInputStream();
вернуть истину;
}catch (IOException e) {
System.out.println("Ошибка загрузки файла!");
е.printStackTrace();
}
Пример кода на стороне сервлета
публичная недействительная служба (требование HttpServletRequest, разрешение HttpServletResponse)
выдает ServletException, IOException {
res.setContentType("текст/обычный");
Входной поток inputStream = ноль;
пытаться {
inputStream = res.getInputStream();
writefile(srcFile, inputStream);//Сохраняем входной поток inputStream в файл с путем к файлу srcFile
} catch (IOException e) {
е.printStackTrace();
}
} // завершение
сводки службы: при передаче файла он существует в виде потока, а на жестком диске он существует в виде файла. Все, что нам нужно сделать, это отправить поток и прочитать его через HttpServletRequest и HttpServletResponse или ответить и запросить. А также операции, конвертирующие файлы в потоки или потоки в файлы.