@Drew20
Недопрограммист Android))

Как сохранить пришедший с сервера файл в нужном формате retrofit android?

Я создаю приложение которое посылает разные запросы на сервер при помощи retrofit. Одним из таких запросов есть запрос на прикрепленный к письму файл. Вот я прописал этот запрос в интерфейсе:
@Headers({"Content-type:application/json"})
Call<FileData> getAttach(@Header("Authorization") String token, @Path("id") Integer id, @Path("attach_file_name") String file_name, @Query("type") int type);

Вот класс FileData который используется в запросе:
public class FileData {
    @SerializedName("size")
    @Expose
    private double size;
    @SerializedName("name")
    @Expose
    private String name;

    public FileData(double size, String name) {
        this.size = size;
        this.name = name;
    }

    public double getSize() {
        return Math.round(size * 100.0) / 100.0;
    }

    public String getName() {
        return name;
    }
}

и дальше вот я шлю запрос в классе:
mAPIService.getAttach("Bearer " + access_token, id, name, ty_pe).enqueue(new Callback<FileData>() {
            @Override
            public void onResponse(@NonNull Call<FileData> call, @NonNull Response<FileData> response) {
                if(response.isSuccessful())
                {

                }
            }

            @Override
            public void onFailure(@NonNull Call<FileData> call, @NonNull Throwable t) {

            }
        });

и вот несколько примеров как мне приходит в ответе прикрепленный файл:
картинка:
200 OK https://сервер/v1/message/1303758/attachment/575b3981-4372-4104-98f3-a9eee386a0d5.jpg?type=1 (215ms)
        Content-Length: 107625
        Content-Disposition: attachment; filename="575b3981-4372-4104-98f3-a9eee386a0d5.jpg"
        P3P: policyref="/w3c/p3p.xml", CP="NOI ADM DEV COM NAV OUR STP"
    08-27 11:17:01.040 D: Keep-Alive: timeout=5, max=100
        Connection: Keep-Alive
        Content-Type: image/jpeg

или вот пустой текстовый документ:
200 OK https://сервер/v1/message/1303651/attachment/%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82.txt?type=1 (224ms)
    Content-Disposition: attachment; filename="Новый текстовый документ.txt"
    Vary: Accept-Encoding
    P3P: policyref="/w3c/p3p.xml", CP="NOI ADM DEV COM NAV OUR STP"
    Keep-Alive: timeout=5, max=100
    Connection: Keep-Alive
    Content-Type: text/plain; charset=utf-8

если в документе например есть какой-то текст, то в ответе соответственно приходит тот текст который есть в документе.

Я не могу понять как сохранять любой формат дока а не только текст. Картинку например, или архив (за архив я вообще не понимаю как это будет происходить), ссылку html. Название худо-бедно можно вытащить из запроса, или из ответа, размер необязательно, но вот как создать новый файл с нужным мне расширением и с правильным содержимым. Если кто-то занимался подобного рода разработкой, то я буду очень благодарен за полезные советы и любую информацию.
  • Вопрос задан
  • 402 просмотра
Пригласить эксперта
Ответы на вопрос 1
@umpteenthdev
Судя по виду класса FileData используется GSON. Он предназначен, насколько мне известно, для работы с JSON файлами. Используя GsonConverter для Retrofit2 вы сможете получить желаемый FileData, но только если сервер присылает ответ в формате JSON постоянно. Если приходят attachments в виде произвольных файлов, то, возможно, вам удобнее будет получать набор байт:
@Override
        public void onResponse(Response response) throws IOException {
            response.body().byteStream(); // Read the data from the stream
        }

Последнее скопипастил отсюда.

А вообще неплохой гайд по загрузке файлов с помошью Retrofit есть здесь
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы