Добрый день.
Как можно скачать файл по url, получив его параметры в виде имени и расширения?
Все найденные примеры совершают потоковую запись в уже созданный файл с указанным именем и расширением.
Спасибо
Ответ
На самом деле, понятие расширения пришло из Windows. В Linux название файлов включает и то, что находится после точки тоже. Получить названия файла можно, если сервер его включил в Content-Disposition. Ну, по крайней мере, стандарт HTTP говорит, что эта информация находится именно там. Content-Disposition можно взять так:
String uri = "http://www.website.com/download/file.pdf";
URL url = new URL(uri);
URLConnection conn = url.openConnection();
Map header =conn.getHeaderFields();
header.get("Content-Disposition")
Проблема в том, что не все это делают. Например Google Drive на команду download в Content-Disposition возвращает json.txt, в котором есть инструкции по файлу. Выглядит это примерно так:
disposition: "SCAN_CLEAN"
downloadUrl: "https://doc-10-bc-docs.googleusercontent.com/docs/securesc/xxxxxxxxxxxx/xxxxxxxxxxxx/xxxxxxxxxxxx/xxxxxxxxxxxx/xxxxxxxxxxxx/xxxxxxxxxxxx?e=download"
fileName: "Oxford_dictionary.zip"
scanResult: "OK"
sizeBytes: 431943
Есть в header ещё Content-Type. Из него можно выудить отдельно расширение (точнее медиа-тип) файла. Брать нужно как-то так:
String uri = "http://www.website.com/download/file.pdf";
URL url = new URL(uri);
URLConnection conn = url.openConnection();
String type = conn.getContentType();
Возвращает он строку типа:
application/pdf
Но чего-то стандартного, насколько я знаю, нет.
Комментариев нет:
Отправить комментарий