在Android应用程序中从亚马逊s3下载之前获取文件大小

时间:2013-08-26 12:43:40

标签: android amazon-s3 amazon android-progressbar

我开发了一个应用程序,其中我有一个从Amazon s3服务器下载文件的ASyncTask。 由于相关文件非常大,我需要在下载发生时显示进度条,并且当​​螺旋进度条不断旋转并激怒用户时,螺旋进度条在这里看起来不太好。 我需要使用水平样式进度条,我需要知道要下载的文件的大小。 在从亚马逊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 /'是​​我创建的用于在设备上存储文件的新目录。

1 个答案:

答案 0 :(得分:2)

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

        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:

我检查了亚马逊关于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是一个对象,其中包含有关下载进度的大量信息。它具有传输的字节数,传输的总字节数和传输百分比。看一下方法细节。

enter image description here