Я новичок в технологии JAVA, особенно в Servlets. Мне нужно создать проект веб-приложения, который загружает и загружает файлы на сервер (tomcat). У меня уже есть сервлет загрузки, который отлично работает.Сервлет для загрузки файлов из определенной папки?
У меня также есть сервлет загрузки, найденный в Интернете. Но проблема в том, что этот сервлет позволяет загружать только определенный файл, а путь к этому конкретному файлу указан в сервлет. Мне нужно разрешить клиенту просмотреть весь контент моей папки для загрузки и выбрать, какой файл он хочет загрузить из этой папки.
Код загрузки сервлета это:
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownloadServlet extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {
static final long serialVersionUID = 1L;
private static final int BUFSIZE = 4096;
private String filePath;`
public void init() {
// the file data.xls is under web application folder
filePath = getServletContext().getRealPath("") + File.separator;// + "data.xls";
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
File file = new File(filePath);
int length = 0;
ServletOutputStream outStream = response.getOutputStream();
ServletContext context = getServletConfig().getServletContext();
String mimetype = context.getMimeType(filePath);
// sets response content type
if (mimetype == null) {
mimetype = "application/octet-stream";
}
response.setContentType(mimetype);
response.setContentLength((int)file.length());
String fileName = (new File(filePath)).getName();
// sets HTTP header
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
byte[] byteBuffer = new byte[BUFSIZE];
DataInputStream in = new DataInputStream(new FileInputStream(file));
// reads the file's bytes and writes them to the response stream
while ((in != null) && ((length = in.read(byteBuffer)) != -1))
{
outStream.write(byteBuffer,0,length);
}
in.close();
outStream.close();
}
}
страница JSP заключается в следующем:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Download Servlet Test</title>
</head>
<body>
Click on the link to download: <a href="DownloadServlet">Download Link</a>
</body>
</html>
Я искал много сервлетов, но все они были, как это ... они разрешил загрузку только определенного файла. Может ли кто-нибудь мне помочь? Большое спасибо!
Что вы пробовали? Вы внесли какие-либо изменения в код, который вы загрузили? Какие изменения вы внесли? Что сработало? А что нет? Проводили ли вы какие-либо исследования, кроме того, что искали полное решение, которое вы можете скачать? Просто копирование и вставка кода из Интернета не заставит вас очень далеко, вам придется иногда выполнять свою работу. – Adrian
@Adrian Спасибо за ваш ответ. Как я уже сказал, приведенный выше код отлично подходит для загрузки только файла, указанного в качестве пути к нему в Servlet. В этом примере в функции init(). Я попытался указать путь как строку для атрибута filePath.example: filepath = "C: // Apache // Application // data //", но я получил сообщение об ошибке: Access denied. Я попробовал что-то еще: чтобы составить список содержимого папки в моем JSP с атрибутом файла и методом listFiles, а затем пишу '
<% = file.getName()%> ', но это работало только в IE с сохранением цели как. – AdiCrainic
@ user2236267 попробуйте использовать другой путь, например * C: \\ external \\ path *. Кроме того, убедитесь, что у вашего пользователя достаточно разрешений для записи в эту папку. Я не включил эту информацию, так как предположил, что вы уже это знали. –