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

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

répondre à tous(3)
伊谢尔伦

Le format de téléchargement et de transmission du fichier est différent de celui de la soumission du formulaire général. Il utilise le format multipart/form-data pour encoder les données request.getParameter ne peut obtenir que des paires clé-valeur. Le fichier nécessite un traitement spécial et est principalement divisé. en deux parties.

  • Traitement front-end, confirmez que l'attribut form de votre formulaire front-end enctype est multipart/form-data, exemple :

    <form enctype="multipart/form-data" method="post" action="xxx">
      <input type="file" name="file" id="file" multiple /><br/>
    </form>
  • Traitement en arrière-plan. tomcat7Ce qui précède peut utiliser directement l'API native HttpServletRequest.getPart(), dans 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(); //获取文件输入流

Pour une utilisation spécifique, veuillez vous référer à la documentation javaee
servlet3.0(Tomcat7) Les versions suivantes nécessitent un package jar tiers pour aider à analyser les fichiers téléchargés. Généralement, les commons-fileupload et commons-fileupload-io d'Apache sont utilisés. Pour un usage spécifique, veuillez vous référer à la documentation officielle et n'entrerons pas dans les détails

.
Peter_Zhu

file.exists() renvoie false. Il ressort du chemin de votre fichier qu'il est manquant. Vous devez vérifier quel processus il est filtré.

巴扎黑

Le chemin pour télécharger le fichier est C:fakepathtest.txt. Vous pouvez dire à partir de ce nom qu'il s'agit d'un faux chemin.

Ce chemin vous est donné par le navigateur lorsqu'il vous est téléchargé. Ce chemin n'est pas le chemin qui existe réellement sur votre serveur. Donc si vous utilisez ce chemin pour retrouver ce fichier sur le serveur, il est impossible de le retrouver.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal