Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android应用程序中从AmazonS3下载之前获取文件大小_Android_Amazon S3_Amazon_Android Progressbar - Fatal编程技术网

在android应用程序中从AmazonS3下载之前获取文件大小

在android应用程序中从AmazonS3下载之前获取文件大小,android,amazon-s3,amazon,android-progressbar,Android,Amazon S3,Amazon,Android Progressbar,我开发了一个应用程序,其中有一个异步任务,可以从AmazonS3服务器下载文件。 由于相关文件的大小相当大,我需要在下载时显示一个进度条,当螺旋进度条不断旋转并激怒用户时,它在这里看起来不太好。 我需要使用水平样式的进度条,我需要知道要下载的文件的大小。 在从AmazonS3下载之前,是否有人知道知道文件大小的方法 这是我使用的下载代码 @Override protected Void doInBackground(Void... params) { Trans

我开发了一个应用程序,其中有一个异步任务,可以从AmazonS3服务器下载文件。 由于相关文件的大小相当大,我需要在下载时显示一个进度条,当螺旋进度条不断旋转并激怒用户时,它在这里看起来不太好。 我需要使用水平样式的进度条,我需要知道要下载的文件的大小。 在从AmazonS3下载之前,是否有人知道知道文件大小的方法

这是我使用的下载代码

    @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/”是我创建的用于在设备上存储文件的新目录。

我假设您使用的代码如下所示

        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文档。有一些方法和侦听器可能对显示您的进度和尝试使用它们很有用

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

更新2:

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


我正在从amazon s3服务器下载文件,它不需要任何URL,我只提供了访问密钥和要下载的文件路径。但是您是否使用URLConnection类?最好发布你的代码。我需要添加一个进度条,下载前需要文件大小。。我使用了progress listener,在这种情况下没有帮助。我认为根据他们的库,你不需要获得实际大小来建立进度,你只需要获得进度并在android视图上显示它。您说过您已经使用了progress listener和getProgress,那么输出是什么?如果它崩溃了,或者输出为空,那么您可能做错了。getProgress()返回以下内容:“com.amazonaws.services.s3.transfer.internal。TransferProgressImpl@40d661b0“我不知道如何利用这个来取得进展。。它返回这个字符串,并在每次进程中更改最后一个数字(不是按序列顺序)。
getProgress() //This will return TransferProgress object. See the links above
addProgressListener