Модификация - загрузка файла с использованием URL в ответ - PullRequest
0 голосов
/ 06 сентября 2018

This is my JSON Response from server

Это ясно показывает, что URL-адреса мультимедийных файлов принимаются на стороне клиента после получения ответа. Мой вопрос: как мне загрузить файлы, используя URL-адреса, к которым у меня нет доступа, пока я не получу ответ? И есть ли возможность загрузить файл одновременно с получением URL-адреса или получить его, а затем загрузить файл?

Я застрял здесь и кто-нибудь может кратко объяснить мне решение здесь?

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 06 сентября 2018

Вам нужно проанализировать Json в модели.

Затем вы можете получить свойство url и загрузить его в файловую систему. Вы можете использовать HttpUrlConnection, чтобы сделать это, или если вы хотите использовать библиотеку Picasso с Target Picasso и загрузить ее в файловую систему.

Позвольте мне показать вам пример.

Использование Пикассо :

        public static void downloadImageWithPicasso(Context context, String url) {
            Picasso.with(context)
                    .load(your_url_from_model)
                    .into(saveUsingTarget(url));
        }

        private static Target saveUsingTarget(final String url){
            Target target = new Target(){

                @Override
                public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
                    new Thread(new Runnable() {

                        @Override
                        public void run() {

                            File file = new File(Environment.getExternalStorageDirectory().getPath() + "/" + url);
                            try {
                                file.createNewFile();
                                FileOutputStream ostream = new FileOutputStream(file);
                                bitmap.compress(Bitmap.CompressFormat.JPEG, 80, ostream);
                                ostream.flush();
                                ostream.close();
                            } catch (IOException e) {
                                Log.e("IOException", e.getLocalizedMessage());
                            }
                        }
                    }).start();

                }

                @Override
                public void onBitmapFailed(Drawable errorDrawable) {

                }

                @Override
                public void onPrepareLoad(Drawable placeHolderDrawable) {

                }
            };
            return target;
        }

Использование HttpUrlConnection

public void downloadImageWithUrlConnection(){
        try{

            URL url = new URL("your_url_from_model");

            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);
            urlConnection.connect();

            File sdCardPath = Environment.getExternalStorageDirectory().getAbsoluteFile();

            String filename = "file_name.png";


            File file = new File(sdCardPath,filename);
            file.createNewFile();

            FileOutputStream fileOutput = new FileOutputStream(file);
            InputStream inputStream = urlConnection.getInputStream();

            byte[] buffer = new byte[1024];
            int bufferLength = 0;

            while ( (bufferLength = inputStream.read(buffer)) > 0 ){
                fileOutput.write(buffer, 0, bufferLength);

            }

            fileOutput.close();

        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

ВАЖНО : Если вы хотите использовать опции HttpURLConnection, вам нужно запустить это в фоновом потоке.

Надеюсь, это вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...