Nano Hash - криптовалюты, майнинг, программирование

Загрузите файл Android и назовите его так, как он есть на сервере, используя модификацию

У меня есть API, который возвращает файл PDF. Когда я размещаю URL-адрес в браузере, я получаю файл с определенным именем - не фиксированным - и он основан на запросе, отправленном в URL-адресе.

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

Как я могу этого добиться?

Запрос на модернизацию

private void initDownload(){

    final OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .readTimeout(60, TimeUnit.SECONDS)
            .connectTimeout(60, TimeUnit.SECONDS)
            .build();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://../.../API/")
            .client(okHttpClient)
            .build();
    
    RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);
    Call<ResponseBody> request = retrofitInterface.downloadClientFile(8685);
    try {
        downloadFile(request.execute().body());
    } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
    }
}

Здесь я получил тело, а затем создал файл с именем

private void downloadFile(ResponseBody body) throws IOException {

    int count;
    byte data[] = new byte[1024 * 4];
    long fileSize = body.contentLength();
    InputStream bis = new BufferedInputStream(body.byteStream(), 1024 * 8);
    File outputFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "file.pdf");
    OutputStream output = new FileOutputStream(outputFile);
     // Rest of the code ...
}

В реализации API имя файла возвращается в заголовке ответа, как показано ниже.

httpResponseMessage.Content.Headers.ContentDisposition.FileName = fileName
11.03.2021

  • Если URL-адрес содержит имя файла, посмотрите stackoverflow.com/questions/11575943/. Ваш ответ содержит имя файла? Или вы просто получаете содержимое файла? 11.03.2021
  • @NRUSINGHAMOHARANA Я проверил реализацию API. заголовок ответа содержит имя файла, но я не знаю, как его прочитать. я обновил свой вопрос 11.03.2021

Ответы:


1

Чтобы получить имя файла в разделе заголовка ответа, вы можете попробовать:

    val response = request.execute()
    val headers = response.headers().names()
    headers.forEach {
        Log.d(TAG,"$it")
    }
   val responseBody = response.body()
11.03.2021
  • Да, но если вы проверите мой код, я не использую асинхронный вызов с переопределением успеха и неудачи. У меня есть ResponseBody, а не Response 11.03.2021
  • Хорошо, не могли бы вы попробовать с моим обновленным ответом. Сообщите мне ваш результат, пожалуйста. 11.03.2021
  • Я попробовал, вот что я получил в журнале каждой итерации cache-control, content-length. дата, прагма.. x-aspnet-версия 11.03.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..