繁体   English   中英

如何使用Android开发中的下载链接从Firebase存储下载pdf文件

[英]How to download pdf File from Firebase storage using download link in android development

我在存储文件时得到了下载链接,然后将其保存在数据库中。 现在我想创建一个 listView 有下载按钮,当用户单击下载按钮时,文件保存在移动内部/外部存储中。 怎么做?

这是我的数据库屏幕截图。

在此处输入图片说明

您可以使用内置下载管理器进行下载:只需使用适当的参数调用此函数即可开始下载,您也可以在通知托盘中看到状态。

public long downloadFile(Context context, String fileName, String fileExtension, String destinationDirectory, String url) {


     DownloadManager downloadmanager = (DownloadManager) context.
            getSystemService(Context.DOWNLOAD_SERVICE);
     Uri uri = Uri.parse(url);
     DownloadManager.Request request = new DownloadManager.Request(uri);

     request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
     request.setDestinationInExternalFilesDir(context, destinationDirectory, fileName + fileExtension);

     return downloadmanager.enqueue(request);
}
//create this Async task class to download file 
class DownloadFileFromURL extends AsyncTask<String, String, String> {

        /**
         * Downloading file in background thread
         * */
        @Override
        protected String doInBackground(String... f_url) {
            int count;
            try {
                URL url = new URL(f_url[0]);
                URLConnection conection = url.openConnection();
                conection.connect();

                // this will be useful so that you can show a tipical 0-100%
                // progress bar
                int lenghtOfFile = conection.getContentLength();

                // download the file
                InputStream input = new BufferedInputStream(url.openStream(),
                        8192);

                // Output stream
                OutputStream output = new FileOutputStream(Environment
                        .getExternalStorageDirectory().toString()
                        + f_url[1]);

                byte data[] = new byte[1024];

                long total = 0;

                while ((count = input.read(data)) != -1) {
                    total += count;
                    // writing data to file
                    output.write(data, 0, count);
                }

                // flushing output
                output.flush();

                // closing streams
                output.close();
                input.close();

            } catch (Exception e) {
                Log.e("Error: ", e.getMessage());
            }

            return null;
        }

    }
    //call this async task class from somewhere like
    new DownloadFileFromURL().execute(file_url,"/test.pdf");
 ChildEventListener childEventListener = new ChildEventListener() {
 @Override
 public void onChildAdded(DataSnapshot dataSnapshot, String 
   previousChildName) {
     String fileName = dataSnapshot.getKey();
     String downloadUrl = dataSnapshot.getValue(String.class);
     // Add pdf to the display list.
     // displayList contains urls of pdfs to be downloaded.
     displayList.add(downloadUrl);
  }
  // Other methods of ChildEventListener go here
};
pdfRef.addChildEventListener(childEventListener);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM