我試圖創建超鏈接,打開從網絡驅動器G文件:打開文件
這是我測試的servlet的一部分:
@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:\
一切工作正常我的本地主機應用服務器。我可以從本地驅動器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
--->其實,這應該工作
凡應該是我之間建立一個差異PC和應用程序服務器?
SOLUTION:
我發現links to network drive doesn't work in standalone Tomcat, but works in Eclipse + Tomcat,所以我必須使用完整的URI:
- 案例的Eclipse + Tomcat的:路徑
G:/test_dir/test.txt
工作 - 案例獨立的Tomcat:路徑
\\\\server\\g\\test_dir\\test.txt
工程
有你嘗試了服務器上的簡單測試應用程序以及你的開發盒? – NickJ
是的,它同時適用於 – gaffcz
在這種情況下,它可能會檢查'URLDecoder.decode(requestedFile,「UTF-8」)'的結果是什麼 - 也許這是給你一個不存在的文件名 – NickJ