上传成功之后,用 request.getParameter("filetxt");拿到的是一个路径:C:fakepathtest.txt
这个路径并非是我本地的路径,已上传就已经是这个路径了。
现在我用了一个方法,来计算这个文件的大小,但是没有成功,不知道为什么?
计算大小的方法如下:
public void getFileSize(String path){
//传入文件路径
File file = new File(path);
//测试此文件是否存在
if(file.exists()){
//如果是文件夹
//这里只检测了文件夹中第一层 如果有需要 可以继续递归检测
if(file.isDirectory()){
int size = 0;
for(File zf : file.listFiles()){
if(zf.isDirectory()) continue;
size += zf.length();
}
System.out.println("文件夹 "+file.getName()+" Size: "+(size/1024f)+"kb");
}else{
System.out.println(file.getName()+" Size: "+(file.length()/1024f)+"kb");
}
//如果文件不存在
}else{
System.out.println("此文件不存在");
}
}
调用方法:
String filetxt = request.getParameter("filetxt");
fileSize.getFileSize(filetxt);
(filetxt = "C:fakepathtest.txt")
结果是:此文件不存在
伊谢尔伦2017-04-18 10:53:20
文件上傳傳輸的格式與一般的表單提交不同,它使用了multipart/form-data
格式编码数据,request.getParameter
只能得到鍵值對,文件需要做特殊處理,主要分為兩部分。
前台處理,確認你前台form
表单的 enctype
属性为multipart/form-data
,範例:
<form enctype="multipart/form-data" method="post" action="xxx">
<input type="file" name="file" id="file" multiple /><br/>
</form>
後台處理。 tomcat7
以上可直接使用原生API HttpServletRequest.getPart()
,在servlet
中:
Part filePart = request.getPart("file"); // 对应 <input type="file" name="file">
long bytes = filePart.getSize(); //获取文件大小
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();//文件名
InputStream fileContent = filePart.getInputStream(); //获取文件输入流
具體使用可參考javaee文檔servlet3.0(Tomcat7)
以下版本,需要第三方jar
包来帮助解析上传的文件。一般使用Apache的commons-fileupload
、commons-fileupload-io
,具體使用可參考官方文檔,不再贅述
巴扎黑2017-04-18 10:53:20
上傳檔案給你的路徑是 C:fakepathtest.txt 從這個名字就可以看出來這是一個假的路徑。
這個路徑是瀏覽器在上傳給你的時候給你的,這個路徑不是你伺服器上真實存在的路徑。所以你拿這個路徑到伺服器上找這個檔案是不可能找到的。