Если Ваш imageList имеет список попытки объектов изображения следующий
$ {createLinkTo (dir: 'изображения', файл: image.filename)}.
, Если Ваши imageList как это ['1.jpg', '2.jpg', '3.jpg'] пробуют следующий
**${createLinkTo(dir: 'images', file: image)}**
Это зависит от того, откуда вы получаете входной поток. Если вы получаете его из сервлета, то он доступен через объект HttpServerRequest, который является аргументом doPost. Если вы используете какой-то API отдыха, например, Джерси, запрос может быть введен с помощью @Context. Если вы загружаете файл через сокет, вы будете обязаны указать тип MIME как часть вашего протокола, поскольку вы не будете наследовать заголовки http.
Вы можете просто добавить tika-app-1.x.jar в ваш путь к классу, если вы не используете ведение журнала slf4j где-либо еще, потому что это вызовет конфликт. Если вы используете тика для обнаружения входного потока, он должен быть помечен как поддерживаемый. В противном случае, вызов тика сотрет ваш поток ввода. Однако, если вы используете библиотеку Apache IO, чтобы обойти это, и просто превратите InputStream в файл в памяти.
import org.apache.tika.*;
Tike tika = new Tika();
InputStream in = null;
FileOutputStream out = null;
try{
out = new FileOutputStream(c:/tmp.tmp);
IOUtils.copy(in, out);
String mimeType = tika.detect(out);
}catch(Exception e){
System.err.println(e);
} finally {
if(null != in)
in.close();
if(null != out)
out.close();
}
Я думаю, что это решает проблему:
public String readIt(InputStream is) {
if (is != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
is.close();
return sb.toString();
}
return "error: ";
}
Что это возвращает? Например, для png: «♦ PNG \ n \ n ♦♦♦ .....», для xml:
Довольно полезно, вы не можете попробовать string.contains (), чтобы проверить, что это такое
Я - крупный сторонник, "делают это самостоятельно сначала, затем ищут решение библиотеки". К счастью этот случай - просто это.
необходимо знать "магическое число" файла, т.е. его подпись. Позвольте мне дать пример для обнаружения, представляет ли эти InputStream
файл PNG.
подпись PNG составлена путем добавления вместе следующего в ШЕСТНАДЦАТЕРИЧНОМ ЧИСЛЕ:
1) байт проверки ошибок
2) строка "PNG" как в ASCII:
P - 0x50
N - 0x4E
G - 0x47
3) CR
(возврат каретки) - 0x0D
4) LF
(перевод строки) - 0xA
5) SUB
(замена) - 0x1A
6) LF
(перевод строки) - 0xA
Так, магическое число
89 50 4E 47 0D 0A 1A 0A
137 80 78 71 13 10 26 10 (decimal)
-119 80 78 71 13 10 26 10 (in Java)
, число бита Н может использоваться для представления 2^N
различные значения. Для байта (8
биты), который является 2^8=256
, или 0..255
диапазон. Java полагает, что примитивы байта подписываются , так, чтобы диапазон был -128..127
. Таким образом, 137
считается подпалившим, и представьте -119 = 137 - 256
.
private fun InputStream.isPng(): Boolean {
val magicNumbers = intArrayOf(-119, 80, 78, 71, 13, 10, 26, 10)
val signatureBytes = ByteArray(magicNumbers.size)
read(signatureBytes, 0, signatureBytes.size)
return signatureBytes.map { it.toInt() }.toIntArray().contentEquals(magicNumbers)
}
, Конечно, для поддержки многих типов MIME, необходимо масштабировать это решение так или иначе, и если Вы не довольны результатом, рассматриваете некоторую библиотеку.