2016-07-19 5 views
3

У меня есть код для сохранения изображения из массива байтов.Java получить расширение изображения из байтового массива

Я могу успешно сохранить изображение, используя приведенный ниже код.

В настоящее время я сохраняю изображение с форматом «.png», но хочу получить расширение изображения из массива байтов и сохранить изображение с этим расширением.

Вот мой код

public boolean SaveImage(String imageCode) throws Exception { 
    boolean status = false; 
    Connection dbConn = null; 
    CallableStatement callableStatement = null; 
    try { 
     String base64Image = imageCode.split(",")[1]; 
     byte[] imageBytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(base64Image); 

     Properties propFile = LoadProp.getProperties(); 
     String filepath = propFile.getProperty(Constants.filepath); 
     File file = new File(filepath + "xyz.png"); 
     FileOutputStream fos = new FileOutputStream(file); 
     try { 
      fos.write(imageBytes); 
     } finally { 
      fos.close(); 
     } 
    } catch (Exception e) { 
     throw e; 
    } finally { 
     if (callableStatement != null) { 
      callableStatement.close(); 
     } 
     if (dbConn != null) { 
      dbConn.close(); 
     } 
    } 
    return status; 
} 

Я использую Java и Tomcat 8.

+1

Возможный дубликат [Как определить содержимое байта \ [\] является jpeg?] (Http://stackoverflow.com/questions/4550296/how-to-identify-contents-of-a-byte- is-a-jpeg) –

+1

Чтобы расширить это: существует целый список магических чисел, указывающих тип файла: https://en.wikipedia.org/wiki/List_of_file_signatures – Thomas

ответ

6

Есть много решений. Очень простой пример:

String contentType = URLConnection.guessContentTypeFromStream(new ByteArrayInputStream(imageBytes)); 

Или вы можете использовать сторонние библиотеки. Как Apache Tika:

String contentType = new Tika().detect(imageBytes); 
0

ли вы использовать префикс заголовка data:image/png;base64 данных в base64 изображения?

Из RFC, определение "данные" URL:

### Form : `data:[<mediatype>][;base64],<data>` 
### Syntax: 
`dataurl := "data:" [ mediatype ] [ ";base64" ] "," data 
mediatype:= [ type "/" subtype ] *(";" parameter) 
data  := *urlchar 
parameter := attribute "=" value` 

Образцы:

data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw...... 

Тогда вы можете получить расширение с GIF.

+1

В этом вопросе нет ничего, что говорит о том, что байты кодируются Base64 и используют URL-адрес: data. –

Смежные вопросы