Загрузите мой объект в 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
Метод ----- это относится к сценарию варианта использования, и это может быть обсуждено далее.