1

我开发了一个应用程序,其中有一个从 Amazon s3 服务器下载文件的 ASyncTask。由于相关文件非常大,我需要在下载发生时显示一个进度条,并且当​​它不断旋转并刺激用户时,螺旋进度条在这里看起来不太好。我需要使用一个水平样式的进度条,我需要知道要下载的文件的大小。在从 amazon s3 下载文件之前,有人知道有什么方法可以知道文件大小吗?

这是我使用的下载代码..

    @Override
    protected Void doInBackground(Void... params) {

        TransferManager manager = new TransferManager(access);
        File file = new File(Environment.getExternalStorageDirectory()+"/Downloads", downFile);
        fileDownloaded = "/Downloads/"+ downFile;
        file.setWritable(true);
        Download down = manager.download("files", fileToDown, file );
        try {
            down.waitForCompletion();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

'downFile' 是我将其保存在外部目录中的文件位置。'fileToDown' 是服务器上要下载的文件路径。'/Downloads/' 是我为在设备上存储文件而创建的新目录。

4

1 回答 1

1

我会假设你正在使用这样的代码,

        URL url = new URL(f_url[0]);
        URLConnection conection = url.openConnection();
        // getting file length
        int lengthOfFile = conection.getContentLength();

        // input stream to read file - with 8k buffer
        InputStream input = new BufferedInputStream(url.openStream(), 8192);

该方法getContentLength()将返回给您文件的大小。

更新 1:

我查看了 Amazon 的关于 TransferManager 和 Download 类的 java 文档。有一些方法和侦听器可能有助于显示您的进度并尝试使用它们。

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/Transfer.html#getProgress()

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferProgress.html

getProgress() //This will return TransferProgress object. See the links above

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/Transfer.html#addProgressListener(com.amazonaws.services.s3.model.ProgressListener)

addProgressListener

我认为这将使您能够设置一个progressListener。

更新 2:

TransferProgress 是一个对象,其中包含有关下载进度的大量信息。它具有传输的字节数、传输的总字节数和传输百分比。看方法细节。

在此处输入图像描述

于 2013-08-26T13:08:19.777 回答