要将图片通过链接下载到本地然后在上传到自己的服务器上 但是图片的格式是无法获取到
存入到本地的都是判断出来的格式 有一些是不正确的
URL url = new URL(matcher2.group().substring(5, matcher2.group().length() - 1));
String last = getUrl(String.valueOf(url));
URLConnection con = url.openConnection();
con.setConnectTimeout(120 * 1000);
InputStream is = con.getInputStream();
byte[] bs = new byte[1024];
int len;
String xxUrl = "temp";
File sf = new File(xxUrl);
if (!sf.exists()) {
sf.mkdirs();
}
String uuid32 = getUUID32();
OutputStream os = new FileOutputStream(sf.getPath() + "/" + uuid32 + last);
在outPut的时候last就是图片的格式 但是不知道怎么通过链接获取图片格式 请教一下大佬帮忙看一下有什么事可以解决的
图片链接
https://mmbiz.qpic.cn/mmbiz_jpg/FJYxahcppx2C9jyw4hJQKH9R9Ws8LdPicmrAvfw7kS1Tau6PuLP7eOBjqybtiaT9icJo9OupL9ibMdAIFBnR2wtvSQ/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
使用后缀获取图片格式是不可取的,每一个图片文件都是可以解析的,在他们的元数据区都存在魔数,我们可以通过魔数进行判断该图片类型。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ImageTest {
/**
* 读取文件的前10个字节
*
* @return 前10个字节
*/
private static byte[] readFileTenBytes(File file) {
byte[] buffer = new byte[10];
try {
FileInputStream fileInputStream = new FileInputStream(file);
//noinspection ResultOfMethodCallIgnored
fileInputStream.read(buffer);
} catch (IOException e) {
e.printStackTrace();
return null;
}
return buffer;
}
/**
* 字节数组转成16进制表示格式的字符串
*
* @param byteArray
* 需要转换的字节数组
* @return 16进制表示格式的字符串
**/
private static String toHexString(byte[] byteArray) {
StringBuilder hexString = new StringBuilder();
for (byte aByteArray : byteArray) {
if ((aByteArray & 0xff) < 0x10) {
hexString.append("0");
}
hexString.append(Integer.toHexString(0xFF & aByteArray));
}
return hexString.toString().toLowerCase();
}
public static void main(String[] args) {
File jpgImageFile = new File("/Users/xuanchi.lyf/Desktop/test.png");
byte[] bytes = readFileTenBytes(jpgImageFile);
if (bytes == null) {
return;
}
System.out.println(toHexString(bytes));
}
}
把问号后面的字符串截取掉就是正常连接