【问题标题】:get size of file before download from amazon s3 in android app在android应用程序中从amazon s3下载之前获取文件大小
【发布时间】:2013-08-28 23:02:25
【问题描述】:

我开发了一个应用程序,其中有一个从 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/' 是我创建的用于在设备上存储文件的新目录。

【问题讨论】:

    标签: android amazon-s3 amazon android-progressbar


    【解决方案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:

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

    【讨论】:

    • 我正在从 amazon s3 服务器下载文件,它不需要任何 URL,我只是提供了访问密钥和要下载的文件路径。
    • 但是你使用 URLConnection 类吗?最好发布您的代码。
    • 我需要添加一个进度条,在下载之前我需要文件大小。我使用了进度监听器,在这种情况下没有帮助。
    • 我认为基于他们的库,您不需要获取实际大小来建立进度,您只需要获取进度并将其显示在 android 视图上即可。你说你已经使用了进度监听器和 getProgress 那么输出是什么?如果它崩溃了或者你有空白输出,那么你可能做错了。
    • getProgress() 返回以下内容:“com.amazonaws.services.s3.transfer.internal.TransferProgressImpl@40d661b0”我不知道如何使用它来获得进度.. 它返回这个字符串在每个进度中更改的最后一个数字(不按顺序排列)。
    猜你喜欢
    • 2014-11-28
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    相关资源
    最近更新 更多