Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何验证具有有效扩展名的文件?_Java_File - Fatal编程技术网

Java 如何验证具有有效扩展名的文件?

Java 如何验证具有有效扩展名的文件?,java,file,Java,File,假设Java代码的输入是一个jpeg文件。如何在启动流程之前验证输入是否具有有效的扩展名。有时,用户上传一个扩展名修改为jpeg的pdf文件,从而使代码崩溃 每个文件都有一个幻数点。但是否有其他方法可以解决此问题。检查文件签名: 您可以通过读取几个字节来验证文件类型 注意。检查文件签名: 您可以通过读取几个字节来验证文件类型 问候。a。下面的函数将列出目录中的所有扩展名。您可以做的是列出所有文件并获取所有文件的扩展名,并可以检查哪些文件可以上载。您可以在UI上提供仅允许.jpeg文件的客

假设Java代码的输入是一个jpeg文件。如何在启动流程之前验证输入是否具有有效的扩展名。有时,用户上传一个扩展名修改为jpeg的pdf文件,从而使代码崩溃


每个文件都有一个幻数点。但是否有其他方法可以解决此问题。

检查文件签名:

您可以通过读取几个字节来验证文件类型


注意。

检查文件签名:

您可以通过读取几个字节来验证文件类型


问候。

a。下面的函数将列出目录中的所有扩展名。您可以做的是列出所有文件并获取所有文件的扩展名,并可以检查哪些文件可以上载。您可以在UI上提供仅允许.jpeg文件的客户端验证

public static void main(String args[]) {
        System.out.println("GET");
        File fileObj = new File("D:\\");
        File[] listAll = fileObj.listFiles();
        for (File file : listOfFiles) {
        if (file.isFile()) {
            System.out.println("Extension ."+file.getName().substring(file.getName().lastIndexOf('.')+1));
        }
        }
    }

b。关于延期的错误,我没有经历过这种情况。可能是eltabo指定的点可以帮助。

a。下面的函数将列出目录中的所有扩展名。您可以做的是列出所有文件并获取所有文件的扩展名,并可以检查哪些文件可以上载。您可以在UI上提供仅允许.jpeg文件的客户端验证

public static void main(String args[]) {
        System.out.println("GET");
        File fileObj = new File("D:\\");
        File[] listAll = fileObj.listFiles();
        for (File file : listOfFiles) {
        if (file.isFile()) {
            System.out.println("Extension ."+file.getName().substring(file.getName().lastIndexOf('.')+1));
        }
        }
    }

b。关于延期的错误,我没有经历过这种情况。可能是eltabo可以帮助的指定点。

如果您只想检查文件名,可以执行以下操作:

public boolean checkJPEG(File file) {
   String fileName = file.getName().toUpperCase();
   return fileName.endsWith(".JPG") || fileName.endsWith(".JPEG");
}
但是这个方法只检查文件名,不检查内容。更完整的方法包括幻数测试

public boolean checkJPEG(File file) throws IOException {
   String fileName = file.getName().toUpperCase();
   boolean extension = fileName.endsWith(".JPG") || fileName.endsWith(".JPEG");
   if (!extension) {
      return false;
   }
   FileInputStream in = null;
   try {
      in = new FileInputStream(file)
      byte[] magic = new byte[3];
      int count = in.read(magic);
      if (count < 3) return false;
      return magic[0] == 0xFF && magic[1] == 0xD8 && magic[2] == 0xFF;
   } finally {
      try {
         if (in != null) in.close();
      } catch (IOException ex) {}
   }
}
public boolean checkJPEG(文件)引发IOException{
字符串文件名=file.getName().toUpperCase();
布尔扩展名=fileName.endsWith(“.JPG”)| | fileName.endsWith(“.JPEG”);
如果(!扩展名){
返回false;
}
FileInputStream in=null;
试一试{
in=新文件输入流(文件)
字节[]魔术=新字节[3];
int count=in.read(魔法);
如果(计数<3)返回false;
返回magic[0]==0xFF&&magic[1]==0xD8&&magic[2]==0xFF;
}最后{
试一试{
if(in!=null)in.close();
}catch(IOException ex){}
}
}

此处的文件签名列表:

如果只想检查文件名,可以执行以下操作:

public boolean checkJPEG(File file) {
   String fileName = file.getName().toUpperCase();
   return fileName.endsWith(".JPG") || fileName.endsWith(".JPEG");
}
但是这个方法只检查文件名,不检查内容。更完整的方法包括幻数测试

public boolean checkJPEG(File file) throws IOException {
   String fileName = file.getName().toUpperCase();
   boolean extension = fileName.endsWith(".JPG") || fileName.endsWith(".JPEG");
   if (!extension) {
      return false;
   }
   FileInputStream in = null;
   try {
      in = new FileInputStream(file)
      byte[] magic = new byte[3];
      int count = in.read(magic);
      if (count < 3) return false;
      return magic[0] == 0xFF && magic[1] == 0xD8 && magic[2] == 0xFF;
   } finally {
      try {
         if (in != null) in.close();
      } catch (IOException ex) {}
   }
}
public boolean checkJPEG(文件)引发IOException{
字符串文件名=file.getName().toUpperCase();
布尔扩展名=fileName.endsWith(“.JPG”)| | fileName.endsWith(“.JPEG”);
如果(!扩展名){
返回false;
}
FileInputStream in=null;
试一试{
in=新文件输入流(文件)
字节[]魔术=新字节[3];
int count=in.read(魔法);
如果(计数<3)返回false;
返回magic[0]==0xFF&&magic[1]==0xD8&&magic[2]==0xFF;
}最后{
试一试{
if(in!=null)in.close();
}catch(IOException ex){}
}
}

此处的文件签名列表:

除非完全解析文件并验证其完全符合格式规范,否则无法确定文件类型。只有这样你才能确定

检查幻数是一种快速的检查方法,很有可能正确猜测类型。但显然它不是万无一失的,它很容易制作一个以字节FF D8 FF开头的文件,看起来像jpeg,但显然不能保证它真的是jpeg

或者仅仅依靠文件扩展名


您只需在可靠性和简单性之间进行权衡。如果您想要简单,请信任文件扩展名。如果需要安全性,请验证文件内容。

除非完全解析文件并验证其完全符合格式规范,否则无法确定文件类型。只有这样你才能确定

检查幻数是一种快速的检查方法,很有可能正确猜测类型。但显然它不是万无一失的,它很容易制作一个以字节FF D8 FF开头的文件,看起来像jpeg,但显然不能保证它真的是jpeg

或者仅仅依靠文件扩展名


您只需在可靠性和简单性之间进行权衡。如果您想要简单,请信任文件扩展名。如果您想要安全,请验证文件内容。

幻数解决方案已经实现:请参阅以获取指向Java Mime幻数库的链接。

幻数解决方案已经实现:请参阅以获取指向Java Mime幻数库的链接。

.toString().endsWith(某物)
?但是如果用户给了我一个.jpeg怎么办文件,实际上是一个pdf文件,扩展名刚刚更改。
.toString().endsWith(SOMETHING)
?但是如果用户给了我一个“.jpeg”文件,它实际上是一个扩展名刚刚更改的pdf文件,该怎么办呢?嗯,至少他知道,如果魔法数字不正确,它不是jpeg。因此,意外重命名可以得到很好的处理。这并不能防止恶意伪造JPEG,你所说的一切都适用。好吧,至少他知道,如果魔法数字不正确,它就不是JPEG。因此,意外重命名可以得到很好的处理。这并不能防止恶意伪造JPEG,你所说的一切都适用。非常感谢你的评论。这对我很有帮助。非常感谢你的评论。这对我很有帮助。