从networking驱动器打开文件

我试图创build超链接从networking驱动器G打开文件:

这是我的testingservlet的一部分:

@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> 

networking驱动器在应用程序服务器上映射为G:\

我的本地主机应用程序服务器上的一切工作正常 。 我能够从本地驱动器C:甚至从相同的networking驱动器G:打开文件。

当我在真实服务器上启动JSF应用程序时,我只能从本地驱动器打开文件。 不是从G:驱动器

我试图简单的JAVA应用程序(查找Java实例是否可以访问networking驱动器),它同时适用于(服务器和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"); } } 

我已经尝试了不同的URIscheme:

  • G:/test_dir
  • G:\\test_dir

而下面的工作根本不起作用:

  • file://server/g:/test_dir
  • ///server/g:/test_dir
  • \\\\server\\g\\test_dir —>其实这个应该可以

开发PC和应用程序服务器的区别在哪里?

解:

我发现链接到networking驱动器不能在独立的Tomcat中工作,但在Eclipse + Tomcat中工作 ,所以我必须使用完整的URI:

  • 大小写Eclipse + Tomcat:pathG:/test_dir/test.txt 作品
  • 大小写独立的Tomcat:Path \\\\server\\g\\test_dir\\test.txt 作品

Solutions Collecting From Web of "从networking驱动器打开文件"

如果您可以调试您的服务器并查看日志,请尝试以下操作:

 String requestedFile = request.getPathInfo(); log.debug('requestedFile='+requestedFile); String decodedFilename = URLDecoder.decode(requestedFile, "UTF-8"); log.debug('decodedFilename='+decodedFilename); File dir = new File("G:/test_dir"); log.debug('File g:/test_dir is a dir:'+dir.isDirectory()); File file = new File(dir, decodedFilename); log.debug('requested file = '+file.getAbsolutePath()); log.debug('file exists = '+file.isFile()); 

如果您没有设置日志框架,则可以使用System.out.println()而不是log.debug() ,但不建议在生产环境中使用。

这不会解决你的问题,但你将能够看到发生了什么事情。

我发现链接到网络驱动器不能在独立的Tomcat中工作,但在Eclipse + Tomcat中工作 ,所以我必须使用完整的URI:

  • 大小写Eclipse + Tomcat:路径G:/test_dir/test.txt作品
  • 大小写独立的Tomcat:Path \\\\server\\g\\test_dir\\test.txt作品