Получить имя файла при загрузке с помощью DownloadManager файла

Я пишу простой фрагмент для загрузки файла с локального сервера.

Uri uri = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(uri);
String filePath= null;
filePath = getApplicationContext().getFilesDir().getAbsolutePath();
filePath = this.getFilesDir().getAbsolutePath();

HERE-----**//request.setDescription("Downloading GeoJSON").setTitle("filename");**

//request.setDestinationUri(Uri.parse(filePath));
request.setDestinationInExternalPublicDir("Folder", "files");
request.setVisibleInDownloadsUi(true);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setMimeType("application/octet-stream");
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
downloadReference = downloadManager.enqueue(request);

Я хочу установить имя файла в заголовке, а также хочу сохранить файл с тем же именем.

Я знаю, что мы можем извлечь имя файла в BroadcastReceiver, но эта трансляция будет получена только после завершения загрузки.

Ниже приведен код веб-службы —

@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("/geojson2")
public Response getFile() {
  File file = new File(GEOJSON_FILE_PATH);
  return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM)
      .header("Content-Disposition", "attachment; filename=" + file.getName()) //optional
      .header("Content-Length", file.length()+"")
      .build();
}

URL-адрес веб-службы выглядит следующим образом: http://localhost:8080/NFZ_WS/rest/hello/geojson

Итак, мой вопрос заключается в том, как получить имя файла при постановке в очередь URI. Скажите, пожалуйста, нужно ли мне редактировать веб-сервис.


person Anas Azeem    schedule 11.05.2015    source источник
comment
Извините, но если вы попросите загрузить файл, я думаю, вы уже знаете имя этого файла. Пожалуйста, дополните.   -  person greenapps    schedule 11.05.2015
comment
Пожалуйста, расскажите, как выглядит используемый URL. Имя файла в заголовке? Название чего?   -  person greenapps    schedule 11.05.2015
comment
@greenapps: URL-адрес выглядит так http://localhost:8080/NFZ_WS/rest/hello/geojson. Я не получаю имя файла из URL.   -  person Anas Azeem    schedule 11.05.2015
comment
Заголовок предназначен для области уведомлений.   -  person Anas Azeem    schedule 11.05.2015
comment
Вы можете сначала выполнить оператор HEAD, а затем GET. Или не использовать DownloadManager, а сделать это самостоятельно с помощью http-компонента.   -  person greenapps    schedule 11.05.2015
comment
@greenapps: Любая ссылка на то, как использовать эти операторы HEAD и GET?   -  person Anas Azeem    schedule 12.05.2015
comment
Разве вы уже не используете оператор GET?   -  person greenapps    schedule 12.05.2015


Ответы (1)


Ваш DownloadManager в настоящее время заботится о «GET» для вас, вам не нужно делать это явно, если вы не используете классы HttpGet, HttpClient. А вот ссылка на реализовать оператор HEAD, чтобы получить имя файла, загружаемого из веб-службы.

person Gaius Octavian    schedule 18.06.2015