Я пытаюсь создать гиперссылки для открытия файлов с сетевого диска G:Открыть файл с сетевого диска
Это часть моего тестирования сервлета:
@WebServlet(name="fileHandler", urlPatterns={"/fileHandler/*"})
public class FileServlet extends HttpServlet
{
private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
...
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String requestedFile = request.getPathInfo();
...
File file = new File("G:/test_dir", URLDecoder.decode(requestedFile, "UTF-8")); // cesta se nacita v kazdem doGet
String contentType = getServletContext().getMimeType(file.getName());
response.reset();
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setContentType(contentType);
response.setHeader("Content-Length", String.valueOf(file.length()));
response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
BufferedInputStream input = null;
BufferedOutputStream output = null;
try
{
input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int length;
while ((length = input.read(buffer)) > 0)
{
output.write(buffer, 0, length);
}
}
finally
{
close(output);
close(input);
}
}
}
Мой HTML компонент:
<a href="fileHandler/test.txt">TEST FILE</a>
Сетевой диск отображается на сервере приложений, как G:\
Все работает нормально на моем localhost сервер приложений. Я могу открыть файл с локального диска C: и даже с того же сетевого диска G :.
Когда я запускаю приложение JSF на реальном сервере, я могу открывать файлы только с локального диска. Не из G: привод.
Я попытался простой JAVA
приложения (чтобы найти, если экземпляр Java имеет доступ к сетевому диску), и она работает на обоих (сервер и dev.PC):
public class Test
{
static void main(String[] args)
{
String path = "G:/test_dir/test.txt";
File file = new File(path);
System.err.println(file.exists() ? "OK" : "NOK");
}
}
я пробовал разные схемы URI:
G:/test_dir
G:\\test_dir
И следующий не работает вообще:
file://server/g:/test_dir
///server/g:/test_dir
\\\\server\\g\\test_dir
---> на самом деле, это должно работать
Где должна быть разница между моей разработки ПК и сервер приложений?
РЕШЕНИЕ:
Я обнаружил, что links to network drive doesn't work in standalone Tomcat, but works in Eclipse + Tomcat, так что я должен использовать полный URI:
- Дело Затмение + Tomcat: Путь
G:/test_dir/test.txt
работает - Case Standalone Tomcat: Путь
\\\\server\\g\\test_dir\\test.txt
У вас попробовал простое тестовое приложение на сервере, а также ваш блок разработчиков? – NickJ
Да, он работает на обоих – gaffcz
В этом случае может быть проверка работы, что результат 'URLDecoder.decode (requestFile," UTF-8 ")' is - возможно, это дает вам несуществующее имя файла – NickJ