Как скачать PDF сгенерированный сервисом ASPX - PullRequest
0 голосов
/ 19 июня 2019

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

Мой код:

public static class OpenPdfFromAspxUrl extends AsyncTask<Void, Integer, Boolean> {

        private Activity mActivity;
        private String fileUrl;
        private String FILENAME = "bmed_document.pdf";


        public OpenPdfFromAspxUrl(Activity activity, String fileURL) {
            this.mActivity = activity;
            this.fileUrl = fileURL;
        }

        /**
         * Before starting background thread
         * Show Progress Bar Dialog
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //showProgressDialog(mActivity, mActivity.getResources().getString(R.string.common_getting_document), false);

        }

        /**
         * Downloading file in background thread
         */
        @Override
        protected Boolean doInBackground(Void... voids) {
            try {
                FileUtils.copyURLToFile(
                        new URL(fileUrl),
                        new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + File.separator + FILENAME),
                        120000,
                        60000);
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }

        }


        @Override
        protected void onCancelled() {
            super.onCancelled();
            //ownProgressDialog.dismiss();
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            int current = values[0];
            String percentaje = new StringBuilder().append("").append(current).append(" %").toString();

//            mActivity.runOnUiThread(() -> {
//                ownProgressDialog.setMessage(percentaje);
//                ownProgressDialog.setPercentage(current);
//            });


        }

        /**
         * After completing background task
         * Dismiss the progress dialog
         **/
        @Override
        protected void onPostExecute(Boolean stored) {
            // dismiss the dialog after the file was downloaded
            try {
//                if (ownProgressDialog != null){
//                    if(ownProgressDialog.getDialog().isShowing()) {
//                        ownProgressDialog.dismiss();
//                    }
//                }
            } catch (NullPointerException e) {
                e.printStackTrace();
            }

            if (stored) {
                // Displaying downloaded pdf
                File newFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + File.separator + FILENAME);

                Intent target = new Intent(Intent.ACTION_VIEW);
                target.setDataAndType(Uri.fromFile(newFile), "application/pdf");
                target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION);
                mActivity.startActivity(Intent.createChooser(target, mActivity.getResources().getString(R.string.common_open_with)));

            } else {
                showAlert(
                        mActivity,
                        mActivity.getResources().getString(R.string.common_error_inform),
                        mActivity.getResources().getString(R.string.common_error_getting_document),
                        false,
                        mActivity.getResources().getString(R.string.common_accept),
                        new OnSingleClickListener() {
                            @Override
                            public void onSingleClick(View v) {
                                // dismiss the dialog after the file was downloaded
                                try {
                                    if (getDialog() != null && getDialog().isShowing()) {
                                        getDialog().dismiss();
                                        BusProvider.getInstance().post(new ShowHideLoadingEvent(false, false));
                                    }
                                } catch (NullPointerException e) {
                                    e.printStackTrace();
                                }
                            }
                        },
                        null,
                        null);
            }
        }

    }

Я использовал все способы, описанные в блоге StackAbuse - Как загрузить файл с URL-адреса в Java , но иногда происходит сбой.

Как я мог успешно выполнить эту загрузку?

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