您的位置:首页技术文章
文章详情页

java - input file类型上传了一个文件,想计算一下上传文件的大小?

浏览:62日期:2024-01-19 17:49:02

问题描述

上传成功之后,用 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')

结果是:此文件不存在

问题解答

回答1:

文件上传传输的格式与一般的表单提交不同,它使用了multipart/form-data格式编码数据,request.getParameter只能得到键值对,文件需要做特殊处理,主要分为两部分。

前台处理,确认你前台form表单的 enctype属性为multipart/form-data,示例:

<form enctype='multipart/form-data' method='post' action='xxx'> <input type='file' name='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 ,具体使用可参考官方文档,不再赘述

回答2:

file.exists()返回false,从你的文件路径能看出 不见了,需要检查一下是在哪个过程被过滤掉。

回答3:

上传文件给你的路径是 C:fakepathtest.txt 从这个名字就可以看出来这是一个假的路径。

这个路径是浏览器在上传给你的时候给你的,这个路径不是你服务器上真实存在的路径。所以你拿这个路径到服务器上找这个文件是不可能找到的。

标签: java