Загрузите мой объект в AWS S3 из моего проекта Android в Kotlin, используя Tranferutility

Я любитель андроид студии и котлина. Однако я разрабатываю приложение, в котором собираю пользовательские данные, и мне нужно отправить его на AWS s3 анонимным способом без аутентификации cognito. Я сделал пример загрузки изображения на AWS S3, но как мне разместить свой объект json на AWS S3. Я прочитал некоторые документы, но я застрял на transferutility.upload, Потому что большинство фрагментов кода для загрузки говорят о файле, и я замираю там, потому что я просто хочу опубликовать свой объект.

То, что я пытался до сих пор. Код интерфейса:

interface IMyAPI {

@GET("child/{dynamic}/learningpods_new")
fun getDynamic(@Path("dynamic")dynamic:String):Observable<ArrayList<Data>>

@POST("parent/")
fun createParent(@Body parentDetails: ParentDetails):Call<ParentDetails>
}

Я могу получить от указанной конечной точки, но я не хочу публиковать в той же конечной точке.

Модифицированный код:

object RetrofitClient {
private var OurInstance : Retrofit?=null
val instance:Retrofit
get() {
    if (OurInstance==null)
    {
        OurInstance =Retrofit.Builder()
                .baseUrl("http://coreapi.imagin8ors.org:8080/v1/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build()
    }
    return OurInstance!!
  }
}

Фрагмент кода отправления:

val retrofit = RetrofitClient.instance
jsonAPI = retrofit.create(IMyAPI::class.java)
val call=jsonAPI.createParent(new_parent)
call.enqueue(object :Callback<ParentDetails>{
        override fun onFailure(call: Call<ParentDetails>?, t: Throwable?) {
            Toast.makeText(this@ParentmainActivity,"something went wrong",Toast.LENGTH_LONG).show()
        }

        override fun onResponse(call: Call<ParentDetails>?, response: Response<ParentDetails>?) {
            Toast.makeText(this@ParentmainActivity,"successful :"+response?.code(),Toast.LENGTH_LONG).show()
        }

    })

Любая помощь приветствуется.

1 ответ

Решение

Если вы хотите опубликовать объект в AWS S3, есть метод по имени putObject где вы можете загружать объекты в AWS S3. Приведенный ниже фрагмент кода представляет собой пример способа загрузки объекта, связанного с именем. Вы можете найти то же самое в указанном ведре.

val background= object :Thread() {
        override fun run() {
            try {
                try {
                    AWSMobileClient.getInstance().initialize(baseContext)
                    credentials = BasicAWSCredentials(AWSutils().KEY,AWSutils().SECRET)
                    s3Client = AmazonS3Client(credentials)
                    val response=s3Client.putObject(AWSutils().bucket_name,"jsa3/NewParentData","name")
                } catch(e:AmazonServiceException) {
                    // The call was transmitted successfully, but Amazon S3 couldn't process
                    // it, so it returned an error response.
                    e.printStackTrace();
                }
                catch(e:AmazonClientException) {
                    // Amazon S3 couldn't be contacted for a response, or the client
                    // couldn't parse the response from Amazon S3.
                    e.printStackTrace();
                }
            }catch (e:Exception){
                e.printStackTrace()
            }
        }
    }
    background.start()

Более того, загрузка не может происходить в mainthread, поэтому вам придется создать другой поток для этой загрузки, и это показано в приведенном выше коде. Если вы спросите, как я могу узнать, был ли объект успешно опубликован: один из способов - это зарегистрировать свое ведро, используя учетную запись aws s3, другой способ - getobject и распечатать objectContent, Это должно дать вам представление о том, что вы смогли опубликовать данные.

Однако могут возникнуть некоторые проблемы: мы должны убедиться, что вы загружаете объект, а не новый экземпляр объекта. Другая вещь при загрузке объектов в aws s3 заключается в том, что вы не можете добавлять данные, происходит только перезапись. Итак, если вы хотите иметь коллекцию объектов, то не стоит использовать putObject Метод ----- это относится к сценарию варианта использования, и это может быть обсуждено далее.

Другие вопросы по тегам