【问题标题】:Uploading audio files on s3 from kotlin app从 kotlin 应用程序在 s3 上上传音频文件
【发布时间】:2020-04-16 15:41:23
【问题描述】:

我通过关注this 创建了一个测试桶(公开访问)。 现在我可以使用上面链接中给出的方法与 python 脚本成功上传,但我无法从 Kotlin 应用程序中执行相同的操作。

Python 代码:

import boto3
from botocore.client import Config

ACCESS_KEY_ID = ********
ACCESS_SECRET_KEY = ***********
BUCKET_NAME = ********

data = open('bitmoji.png', 'rb')
data = open('b_f_a0008.wav', 'rb')

s3 = boto3.resource(
    's3',
    aws_access_key_id=ACCESS_KEY_ID,
    aws_secret_access_key=ACCESS_SECRET_KEY,
    config=Config(signature_version='s3v4')
)
s3.Bucket(BUCKET_NAME).put_object(Key='b_f_a0008.wav', Body=data)

print ("Done")

Kotlin 代码:

private fun upload() {
        val s3Client = AmazonS3Client(BasicAWSCredentials(awsAccessKey, awsSecretKey))
        s3Client.setRegion(Region.getRegion(Regions.US_EAST_2))

        val transferUtility = TransferUtility.builder()
            .context(context)
            .awsConfiguration(AWSMobileClient.getInstance().configuration)
            .s3Client(s3Client)
            .build()

        val transferObserver = transferUtility.upload(awsBucketName, "test.mp3", File(filePath))

        transferObserver.setTransferListener(object : TransferListener {
            override fun onProgressChanged(id: Int, bytesCurrent: Long, bytesTotal: Long) {
                activity!!.runOnUiThread {
                    activity!!.showToast(Constants.TOAST_UPLOAD_SUCCESS + bytesTotal.toString())
                }
            }

            override fun onStateChanged(id: Int, state: TransferState?) {
                activity!!.runOnUiThread {
                    activity!!.showToast(Constants.TOAST_UPLOAD_SUCCESS + state?.name)
                }
            }

            override fun onError(id: Int, ex: Exception?) {
                activity!!.runOnUiThread {
                    activity!!.showToast(Constants.TOAST_EXCEPTION + ex?.message)
                }
            }
        })
    }

println(transferObserver.absoluteFilePath) -> /storage/emulated/0/26-Dec-2019 4:22:49 PM.mp3 println(transferObserver.bytesTotal) -> 4750

请让我知道我在这里做错了什么。

【问题讨论】:

    标签: android kotlin amazon-s3


    【解决方案1】:

    此解决方案有效

    private fun uploadToS3() {
            val credentials = BasicAWSCredentials(awsAccessKey, awsSecretKey)
            val transferManager = TransferManager(credentials)
            val upload = transferManager.upload(awsBucketName, filename, File(filePath))
            val uploadResult = upload.waitForUploadResult()
    
            while (!upload.isDone){
                val bytesTransferred = upload.progress.bytesTransferred
                println(bytesTransferred.toString())
                Thread.sleep(200)
            }
        }
    

    【讨论】:

    • 由于此解决方案在 java 中已被弃用,我仍在寻找问题中提出的解决方案的更正?
    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多