使用 tranferutility 将我的对象从我在 kotlin 中的 android 项目上传到 AWS S3
Upload my object to AWS S3 from my android project in kotlin using tranferutility
我对 android studio 和 kotlin 都很业余。但是,我正在设计一个应用程序,我在其中收集用户数据并需要 post 以匿名方式将其 post 发送到 AWS s3,而无需认知身份验证。我已经完成了将图像上传到 aws S3 的示例,但是我如何 post 我的 json 对象到 AWS S3。我已经阅读了一些文档,但我仍然停留在 transferutility.upload
。因为大多数用于上传的代码片段都在谈论一个文件,我冻结在那里因为,我只想要 post 我的对象。
到目前为止我尝试了什么。接口代码:
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>
}
我可以从指定的端点到达,但我不想 post 到达相同的端点。
改装代码:
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!!
}
}
posting 代码片段:
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()
}
})
感谢任何帮助。
如果您想 post 将对象上传到 AWS S3,可以使用名称为 putObject
的方法将对象上传到 AWS S3。下面的代码片段是上传包含 "name" 的对象的示例方法。您可以在指定的桶中找到相同的东西。
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()
此外,上传不能在主线程上进行,因此您必须创建另一个线程来执行此上传,这就是上面代码中显示的内容。如果您问我如何知道对象是否已成功 posted:一种方法是使用您的 aws s3 帐户签入您的存储桶,另一种方法是执行 getobject
并打印 objectContent
。这应该表明您能够 post 数据。
但是,可能会有一些顾虑:我们必须确保您上传的是对象,而不是对象的新实例。将对象上传到 aws s3 的另一件事是您不能附加数据,只会发生覆盖。所以,如果你想要一个对象的集合,那么使用putObject
方法是不明智的-----这是在用例场景下,这个可以进一步讨论。
我对 android studio 和 kotlin 都很业余。但是,我正在设计一个应用程序,我在其中收集用户数据并需要 post 以匿名方式将其 post 发送到 AWS s3,而无需认知身份验证。我已经完成了将图像上传到 aws S3 的示例,但是我如何 post 我的 json 对象到 AWS S3。我已经阅读了一些文档,但我仍然停留在 transferutility.upload
。因为大多数用于上传的代码片段都在谈论一个文件,我冻结在那里因为,我只想要 post 我的对象。
到目前为止我尝试了什么。接口代码:
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>
}
我可以从指定的端点到达,但我不想 post 到达相同的端点。
改装代码:
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!!
}
}
posting 代码片段:
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()
}
})
感谢任何帮助。
如果您想 post 将对象上传到 AWS S3,可以使用名称为 putObject
的方法将对象上传到 AWS S3。下面的代码片段是上传包含 "name" 的对象的示例方法。您可以在指定的桶中找到相同的东西。
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()
此外,上传不能在主线程上进行,因此您必须创建另一个线程来执行此上传,这就是上面代码中显示的内容。如果您问我如何知道对象是否已成功 posted:一种方法是使用您的 aws s3 帐户签入您的存储桶,另一种方法是执行 getobject
并打印 objectContent
。这应该表明您能够 post 数据。
但是,可能会有一些顾虑:我们必须确保您上传的是对象,而不是对象的新实例。将对象上传到 aws s3 的另一件事是您不能附加数据,只会发生覆盖。所以,如果你想要一个对象的集合,那么使用putObject
方法是不明智的-----这是在用例场景下,这个可以进一步讨论。