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