gpt4 book ai didi

java - 多部分文件字节表示

转载 作者:行者123 更新时间:2023-12-01 12:35:48 25 4
gpt4 key购买 nike

我正在尝试上传图像并进行验证,检查第一个字节以检测图像的格式(在我的情况下为 jpg 或 png)。我正在使用 spring MultipartFile 上传图像。维基百科告诉我们,.PNG 有 89 50 4E 47 0D 0A 1A 0A,.JPG 分别有 FF D8 标记。我正在尝试获取 MultipartFile 中的图像字节:

 CommonsMultipartFile logo = request.getFile('logo')...
byte[] byteArray = logo.getBytes();

但是当我调试时,我发现 byteArray 不包含这些掩码。例如,我尝试上传 .JPG 图像,第一个字节是 -1 40,而 .PNG 的第一个字节是 -119 80 78 71 13 10 26 10 0。但是有趣的是,如果像这样保存图像:

 logo.transferTo(new File(...)) 

到文件系统并使用十六进制编辑器检查图像的字节表示,然后一切正常 - 对于 .PNG 和 .JPEG 都有正确的字节标记(89 50 4E 47 0D 0A 1A 0A 和 FF D8)

我还尝试了 logo.getFileItem().get() 而不是 logo.getBytes() 但没有帮助。我真的很感激任何帮助。谢谢!

最佳答案

您需要考虑代表性的差异。当使用 System.out.println() (或调试器)时,您会看到带符号字节的十进制表示形式。在十六进制编辑器中,您会看到相同的十六进制。

您如何检查代码中的“匹配”?

编辑:将字节与 int 文字进行比较(这就是编译器的 0x 表示法)需要用 0xFF 屏蔽该字节(以抑制符号扩展;编译器将字节转换为 int 进行比较。这就是 java 处理有符号字节类型的方式)。

表达比较的可能方法是(byteArray[] & 0xFF) == 0xXXbyteArray[] == (byte) 0xXX。只需编写 byteArray[] == 0xXX 就意味着字面上 sign 将字节扩展为 int,然后与 int 文字进行比较

关于java - 多部分文件字节表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25608215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com