Мне нужно реализовать передачу файла с сервера на клиент. Файл выбирается сервером и отправляется клиенту. Использую jsp/servlet. Сколько не искал везде есть информация о том как загрузить на сервер а вот как получить толком нет. Подскажите пожалуйста!) Может у кого есть готовая реализация или направьте на путь истины и просветления где искать.
Пишем байты в OutputStream response
public class GetReportServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = getServletContext();
ServletOutputStream out = resp.getOutputStream();
byte[] byteArray = Files.readAllBytes(path);
//данный контент type говорит что будет файл в формате excel
resp.setContentType("application/vnd.ms-excel");
resp.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
out.write(byteArray);
out.flush();
out.close();
}
}
Можно восопльзоваться библиотекой commons-fileupload. Можно загружать не только файлы но и передавать какие либо данные.
Пример:
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Configure a repository (to ensure a secure temp location is used)
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
List<FileItem> items = upload.parseRequest(request);
// Process the uploaded items
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (item.isFormField()) {
processFormField(item);
} else {
processUploadedFile(item);
}
}
Благодарю всех. Я сделал следующую реализацию.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
File file = new File(fileName);
ServletOutputStream outputStream = null;
BufferedInputStream inputStream = null;
try {
outputStream = response.getOutputStream();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.setContentLength((int) file.length());
FileInputStream fileInputStream = new FileInputStream(file);
inputStream = new BufferedInputStream(fileInputStream);
int readBytes = 0;
while ((readBytes = inputStream.read()) != -1)
outputStream.write(readBytes);
}catch (ExportException e){
e.printStackTrace();
}finally {
outputStream.flush();
outputStream.close();
inputStream.close();
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
В одной из папок приложения под андроид есть файл (а точнее несколько файлов) в одной и той-же ошибкой- "Unknown entity 'R'"