我创建ImageServlet以引用我的Web应用程序范围内的视频。
我所有视频的位置都位于Intranet位置,可以从Intranet中的任何计算机访问:
String path = "\\myip\storage\ogg\VX-276.ogg"
在我的应用程序中,当我将其写为URL时 - 它无法显示它!
如果我尝试使用Chrome打开它,它会自动将其更改为file://myip/storage/ogg/VX-276.ogg
并显示该文件。
我尝试这样做:file:////odelyay_test64/storage/ogg/
同样,但Java将字符串转换为:file:\myip\storage\ogg\VX-276.ogg
,但不存在!
引用它的正确方法是什么?
EDITED
我创建了一个小测试:
String path = "file://myip/storage/ogg/VX-276.ogg";
File file = new File(path);
if (file.exists())
System.out.println("exists");
else {
System.out.println("missing" + file.getPath());
}
我得到了:
missing file:\myip\storage\ogg\VX-276.ogg
正如您所看到的那样,正在切换斜杠
答案 0 :(得分:3)
根据您的previous question,您引用了HTML <video>
标记中的资源。 HTML源代码中的所有网址必须为http://
个网址(或至少相对于http://
网址)。大多数浏览器在file://
请求HTML页面时拒绝从http://
URL加载资源。您只需要让URL指向servlet即可。如果servlet的doGet()
方法被命中,那么URL就可以了,你不应该改变它。
您的具体问题在于如何在servlet中打开和读取所需文件。您必须确保path
中的File file = new File(path)
指向有效位置,然后才能在其上打开FileInputStream
。
String path = "file://myip/storage/ogg/VX-276.ogg";
File file = new File(path);
// ...
如果servlet代码写得很好,它没有抑制/吞下异常并且你已经阅读了服务器日志,那么你应该看到一个IOException
,例如FileNotFoundException
以及一个自我每当读取文件失败时,在服务器日志中解释消息。去阅读服务器日志。
更新根据评论,事实证明您正在使用Windows,因此如果没有将其映射到驱动器上,网络磁盘上的file://
将无法用于Java信件。您需要先在驱动器号上映射//myip
,例如X:
。
String path = "X:/storage/ogg/VX-276.ogg";
File file = new File(path);
// ...
答案 1 :(得分:1)
最后我使用了apache的VFS库,我的代码如下:
public static void main(String[] args) {
FileSystemManager fsManager = null;
String path = "\\\\myip\\storage\\ogg\\VX-276.ogg";
try {
fsManager = VFS.getManager();
FileObject basePath;
basePath = fsManager.resolveFile("file:" + path);
if (basePath.exists())
System.out.println("exists");
else {
System.out.println("missing" + basePath.getURL());
}
} catch (FileSystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
通过这种方式,我不需要为系统的每个用户创建一个驱动程序,它允许我不依赖于操作系统!