当前位置: 首页 > 知识库问答 >
问题:

从网络驱动器打开文件

东方建修
2023-03-14
@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);
    }
  }
}
<a href="fileHandler/test.txt">TEST FILE</a>
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

以下内容根本不起作用:

    null
    null

共有1个答案

方苗宣
2023-03-14

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

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(),但不建议在生产中使用。

这不会解决你的问题,但你可以看到发生了什么。

 类似资料:
  • 我有一个超级简单的测试脚本(如下)来开始使用WebDriver。当我运行测试(C#-Visual Studio 2015)时,它会打开一个Firefox浏览器,然后什么也不做。 有几个帖子讨论了以下问题,我也得到了: OpenQA. Selenium.在45000毫秒内启动套接字失败。试图连接到以下地址:127.0.0.1:7055。 但是那些关于这个问题的帖子很旧了,也有一个主要的不同——他们的

  • 本文向大家介绍Android 打开网络上pdf文件,包括了Android 打开网络上pdf文件的使用技巧和注意事项,需要的朋友参考一下 之前写过一篇Android打开本地pdf文件的文章,最后总结的时候说,后面一定要拓展库,让其也能打开网络的的pdf文件。今天终于可以兑现承诺了。frok一份代码https://github.com/JoanZapata/android-pdfview,源码地址:h

  • 我试图启动firefox浏览器,并使用selenium webdriver打开一个网页示例< code>google.com。我成功地启动了浏览器,但启动网页时出现了一些问题。我得到的错误是 线程“main”中的异常 org . open QA . selenium . remote . unreachablebrowserexception:无法启动新会话。 可能的原因是远程服务器地址无效或浏览

  • 问题内容: 是否有代码,我可以使用它(一旦运行它)以物理方式打开cd / dvd驱动器?我知道这在某些其他语言中也是可行的,但是在Java中是否可行?请指出正确的方向。谢谢 问题答案: Java没有提供与CD驱动器进行交互的方法。在Windows平台上,一种简单的方法是调用VBS脚本。 很少有链接可以帮助您: 例子1 例子2 例子3

  • 我有一个问题,上传文件到网络系统使用硒驱动程序。所以在我的页面上,我没有任何输入来设置文件路径,而且我在网络上找到的大多数解决方案都不适合我。我必须点击上传文件按钮,然后在窗口对话框中设置文件的路径。我找到了winforms SendKeys类中使用的方法: 它的工作,但只有当测试有完全控制的机器(如果没有-路径已发送到某处不对话)。这就是问题所在,因为我无法完全控制运行测试的机器。你知道不使用S