Servlet读取文件内容时,在chrome浏览器中只显示filename(如file1.txt)而没有路径,提示“系统找不到文件”?
chrome浏览器由于安全性的考虑,禁止程序jsp读取本地文件。因此要换一个思路解决问题。
/**
* 两种方法解决chrome浏览器无法读取文件路径的问题
* 问题:由于有的浏览器如chrome无法读取本地文件,只能读取文件名filename.txt,
* 故不能直接传递本地文件的绝对路径名
* 方法一:读取web.xml配置文件的初始化参数
* 方法二:获得当前服务器的根目录的真实路径
* @author Administrator
*
*/
public class TestFileServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) {
// String paramFromWeb = getServletContext().getInitParameter("file_upload");
// String realPathServer = getServletContext().getRealPath("/");
try {
String u = "utf-8";
String g = "gb2312";
request.setCharacterEncoding(u);
response.setContentType("text/html; charset="+u);
// 方法一:读取web.xml配置文件的初始化参数
String paramFromWeb = getServletContext().getInitParameter("file_upload");
PrintWriter pw = response.getWriter();
pw.println("paramFromWeb: file_upload = "+paramFromWeb);
pw.print("<br>");
// chrome只能得到文件名filename.txt,而ie则可以得到文件的绝对路径名如C:\\data\\filename.txt
String form_filename = request.getParameter("filename");
pw.println("paramFromForm: form_filename = "+ form_filename);
pw.print("<br>");
String filepath = paramFromWeb+form_filename;
pw.println("filepath = "+filepath);
pw.print("<br>");
// String filedata = new String( FileAccessTool.readStrFromFile(filepath, g).getBytes(g));
String filedata = FileAccessTool.readStrFromFile(filepath, g);//什么编码格式的文件,就用什么格式读取
pw.println(filedata);
pw.print("<br>---------------------------------------------------------<br>");
// 方法二:获得当前服务器的根目录的真实路径
String realPathServer = getServletContext().getRealPath("/");
pw.println("realPathServer = "+realPathServer);
pw.print("<br>");
filepath = realPathServer + "uploadfile"+"\\"+form_filename;
pw.println("filepath = "+filepath);
pw.print("<br>");
filedata = FileAccessTool.readStrFromFile(filepath, g);
pw.println(filedata);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}