java - input file类型上传了一个文件,想计算一下上传文件的大小?
ringa_lee
ringa_lee 2017-04-18 10:51:20
0
3
641

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

结果是:此文件不存在

ringa_lee
ringa_lee

ringa_lee

全員に返信(3)
伊谢尔伦

ファイルアップロード送信の形式は、一般的なフォーム送信の形式とは異なり、request.getParameter でデータをエンコードするために multipart/form-data 形式が使用されます。 -値ペア、ファイル 特別な処理が必要であり、主に 2 つの部分に分かれています。 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-fileuploadcommons-fileupload-io

  • フォアグラウンド処理。フロントエンド form フォームの enctype 属性が multipart/form-data であることを確認します。例: 🎜
リーリー
  • 🎜バックグラウンド処理。 tomcat7 以降では、servlet でネイティブ API HttpServletRequest.getPart() を直接使用できます: 🎜
リーリー 🎜具体的な使用方法については、javaee ドキュメントを参照してください。
servlet3.0(Tomcat7) またはそれ以前のバージョンでは、アップロードされたファイルの解析にサードパーティの jar パッケージが必要です。ファイル。一般的には、Apache の commons-fileuploadcommons-fileupload-io が使用されます。具体的な使用方法については、公式ドキュメントを参照してください。詳しくは説明しません🎜。
いいねを押す +0
Peter_Zhu

file.exists() は false を返します。ファイル パスから、どのプロセスが除外されているかを確認する必要があります。

いいねを押す +0
巴扎黑

ファイルをアップロードするパスは C:fakepathtest.txt です。この名前から、これが偽のパスであることがわかります。

このパスは、サーバーに実際に存在するパスではありません。したがって、このパスを使用してサーバー上でこのファイルを検索しても、見つけることはできません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!