Я разрабатываю веб-приложение, которое может загружать / скачивать файл с клиента на сервер базы данных PostgreSQL с помощью вызова RPC GWT.
Мне удалось создать сервлет загрузки, в котором хранится нужный файл (выбирается пользователем с помощью FileUploadwidget) в каталог «TEMP» Glassfish => затем я использовал команду SQL:
INSERT INTO table VALUES ('"+name+"',lo_import('"+f.getCanonicalPath()+"\\TEMP\\"+name+"'),...)
, которая поместила этот файл в базу данных.Это работает довольно хорошо.
Проблема возникает, когда я хочу загрузить файл с сервера на клиент.Сначала мне нужно поместить файл обратно в каталог TEMP с помощью команды SQL lo_export (...) -> это не сработало (ошибка при создании файла сервера, разрешение запрещено), поэтому я поместил файл вручную в каталог TEMP.
Вопрос в том, как я могу отобразить этот файл, который хранится на сервере, в директории TEMP?
- Мой путь к директории сервера Glassfish: C: \ Program Files (x86) \ glassfish-3.1 \ glassfish \ domains \ domain1 \ TEMP \ example.pdf
- при развертывании URL-адреса приложения выглядит следующим образом:
http://localhost:8080/AppName/
- я пробовал что-то подобное: Window.open ("http://localhost:8080/AppName/TEMP/example.pdf","_blank", "enabled")
Мой КОД: сторона клиента:
String link = GWT.getModuleBaseURL() + "filedownloadservlet";
Window.open(link,event.getSelectedItem().getText(),"enabled");
, поэтому я передаю сервлету, расположенному на стороне сервера, ссылку и имя файла ...я прав?
Сторона сервера:
public class FileDownloadServlet extends HttpServlet {
private String path = "TEMP//"; // Your absolute path
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String filename = req.getParameter("filename");
System.out.println(filename); // THIS IS NULL value
File userManualFile = new File(path + filename);
// You can fetch a Blob from the database instead.
ServletOutputStream servletOutputStream = resp.getOutputStream();
resp.setContentType("application/pdf");
resp.addHeader("content-disposition", "attachment; filename=skuska.pdf");
FileInputStream fileInputStream = new FileInputStream(userManualFile);
IOUtils.copy(fileInputStream, servletOutputStream);
servletOutputStream.flush();
Когда я нажимаю файл в виджете «Дерево», он показывает мне новое окно браузера с этой ошибкой:
java.io.FileNotFoundException: TEMP\null (The system cannot find the file specified)