Android 使用改型将图像url存储到数据库
是否可以在android中使用改装post request@Body方法将url发送到数据库 我正在尝试建立一个应用程序,将上传多个图像到亚马逊s3,之后将获得图像url并将其存储到另一个数据库。我已经研究这个问题两天了,但还是没能解决。请帮帮我 这是我每次将s3ImageUrl上载到数据库时的输出:Android 使用改型将图像url存储到数据库,android,amazon-s3,retrofit2,image-upload,imageurl,Android,Amazon S3,Retrofit2,Image Upload,Imageurl,是否可以在android中使用改装post request@Body方法将url发送到数据库 我正在尝试建立一个应用程序,将上传多个图像到亚马逊s3,之后将获得图像url并将其存储到另一个数据库。我已经研究这个问题两天了,但还是没能解决。请帮帮我 这是我每次将s3ImageUrl上载到数据库时的输出: { "success": true, "data_item": [ { "t_id": "5"
{
"success": true,
"data_item": [
{
"t_id": "5",
"trailerType": "",
"trailerNo": "1",
"f_leftInnerImg": "https",
"f_leftOuterImg": "https",
"f_rightInnerImg": "https",
"f_rightOuterImg": "https",
"m_leftInnerImg": "https",
"m_leftOuterImg": "https",
"m_rightInnerImg": "https",
"m_rightOuterImg": "https",
"r_leftInnerImg": "https",
"r_leftOuterImg": "https",
"r_rightInnerImg": "https",
"r_rightOuterImg": "https"
}
]}
下面是我的API接口:
@POST(“recordtrans”)趣味uploadImageUrl(@Body-Body:UploadImagesUrl):调用
模型类:
data class UploadImagesUrl(
@SerializedName("f_leftInnerImg") val img_frontLeft_inner: String,
@SerializedName("f_leftOuterImg") val img_frontLeft_outer : String,
@SerializedName("f_rightInnerImg") val img_frontRight_inner: String,
@SerializedName("f_rightOuterImg") val img_frontRight_outer: String,
@SerializedName("m_leftInnerImg") val img_middleLeft_inner: String,
@SerializedName("m_leftOuterImg") val img_middleLeft_outer: String,
@SerializedName("m_rightInnerImg") val img_middleRight_inner: String,
@SerializedName("m_rightOuterImg") val img_middleRight_outer: String,
@SerializedName("r_leftInnerImg") val img_rearLeft_inner: String,
@SerializedName("r_leftOuterImg") val img_rearLeft_outer: String,
@SerializedName("r_rightInnerImg") val img_rearRight_inner: String,
@SerializedName("r_rightOuterImg") val img_rearRight_outer: String,
@SerializedName("username") val username: String,
@SerializedName("transID") val transID: String)
答复:
data class DefaultResponse(val success: Boolean, val message: String)
上传\u图像\u S3\u Aws类:
class Upload_Image_S3_Aws (){
fun uploadMultipleImageS3(
context: Context,
path: String,
imgFileName: String,
username: String,
trans_id: String,
view: View
) {
val pd = ProgressDialog(context)
pd.setTitle("Uploading...")
pd.show()
TransferNetworkLossHandler.getInstance(context)
val amazons3: AmazonS3 = s3ClientInitialization(context)
java.security.Security.setProperty("networkaddress.cache.ttl", "60");
val policy: StrictMode.ThreadPolicy = StrictMode.ThreadPolicy.Builder().permitAll().build()
StrictMode.setThreadPolicy(policy)
try {
SharedPrefManager.getInstance(context).settings_response!!.forEach { userSettings ->
val s3_Url = "${userSettings.s3_Bucket}.s3.${userSettings.s3_Region}.amazonaws.com/"
val transferUtility = TransferUtility.builder()
.defaultBucket(userSettings.s3_Bucket)
.context(context).s3Client(amazons3).build()
val file = File(path)
val uploadObserver = transferUtility.upload(
userSettings.s3_Bucket,
"$imgFileName.jpg",
file,
CannedAccessControlList.PublicRead
)
uploadObserver.setTransferListener(object : TransferListener{
override fun onProgressChanged(id: Int, bytesCurrent: Long, bytesTotal: Long) {
val done = (((bytesCurrent.toDouble() / bytesTotal) * 100.0).toInt())
pd.setMessage("Uploaded: ${done}%")
Log.d("zvzsv", "UPLOAD - - ID: $id, percent done = $done")
pd.dismiss()
}
override fun onStateChanged(id: Int, state: TransferState?) {
if (TransferState.FAILED == state || state == TransferState.WAITING_FOR_NETWORK
|| state == TransferState.PENDING_NETWORK_DISCONNECT) {
Log.e("statechange","$state")
Toast.makeText(context, "$state", Toast.LENGTH_LONG).show()
pd.dismiss()
} else if (TransferState.COMPLETED == state) {
AppConstants.countCompleted.add(state.toString())
val s3url = amazons3.getUrl(userSettings.s3_Bucket, imgFileName).toExternalForm()
AppConstants.adds3Url.add(s3Url(s3url))
if (AppConstants.countCompleted.size == 12)
{
AppConstants.adds3Url.forEach {
AppConstants.f_leftInnerImg = it.s3Url
AppConstants.f_leftOuterImg = it.s3Url
AppConstants.f_rightInnerImg = it.s3Url
AppConstants.f_rightOuterImg = it.s3Url
AppConstants.m_leftInnerImg = it.s3Url
AppConstants.m_leftOuterImg = it.s3Url
AppConstants.m_rightInnerImg = it.s3Url
AppConstants.m_rightOuterImg = it.s3Url
AppConstants.r_leftInnerImg = it.s3Url
AppConstants.r_leftOuterImg = it.s3Url
AppConstants.r_rightInnerImg = it.s3Url
AppConstants.r_rightOuterImg = it.s3Url
}
RetrofitClient(context).instance.uploadImageUrl(
UploadImagesUrl(
AppConstants.f_leftInnerImg,
AppConstants.f_leftOuterImg,
AppConstants.f_rightInnerImg,
AppConstants.f_rightOuterImg,
AppConstants.m_leftInnerImg,
AppConstants.m_leftOuterImg,
AppConstants.m_rightInnerImg,
AppConstants.m_rightOuterImg,
AppConstants.r_leftInnerImg,
AppConstants.r_leftOuterImg,
AppConstants.r_rightInnerImg,
AppConstants.r_rightOuterImg,
username,
trans_id)
)
.enqueue(object : Callback<DefaultResponse> {
override fun onFailure(call: Call<DefaultResponse>, t: Throwable) {
if (!NetworkConnectionInternet.isNetworkAvailable(context)){
Snackbar.make(view, AppConstants.NoInternetConnection, Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
pd.dismiss()
}
else
{
Toast.makeText(context,t.message, Toast.LENGTH_LONG).show()
pd.dismiss()
}
}
override fun onResponse(call: Call<DefaultResponse>, response: Response<DefaultResponse>) {
if (!NetworkConnectionInternet.isNetworkAvailable(view.context)){
Snackbar.make(view, AppConstants.NoInternetConnection, Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
pd.dismiss()
}
else
{
if (response.body()!!.success){
Snackbar.make(view, "${AppConstants.countCompleted.size} Photos "+response.body()!!.message, Snackbar.LENGTH_LONG)
.setAction("Action", null)
.show()
pd.dismiss()
}
else
{
Snackbar.make(view, "Something went wrong. Please try again", Snackbar.LENGTH_LONG)
.setAction("Action", null)
.show()
pd.dismiss()
}
}
}
})
}
Log.e("statechange:","$state")
}
}
override fun onError(id: Int, ex: java.lang.Exception?) {
Toast.makeText(context, ex.toString(), Toast.LENGTH_LONG).show()
pd.dismiss()
}
})
}
} catch (e: Exception) {
e.printStackTrace()
}
} private fun s3ClientInitialization(context: Context): AmazonS3 {
var s3_key = ""
var s3_secret = ""
var s3_region = ""
val credentials: BasicAWSCredentials
SharedPrefManager.getInstance(context).settings_response!!.forEach {
s3_key = it.s3_Key!!
s3_secret = it.s3_Secret!!
s3_region = it.s3_Region!!
}
credentials = BasicAWSCredentials(s3_key, s3_secret)
val s3 = AmazonS3Client(credentials, Region.getRegion(s3_region))
s3.endpoint = "https://s3-$s3_region.amazonaws.com/"
return s3
}
任何帮助都意义重大!谢谢
private fun uploadImages(view: View) {
val username = SharedPrefManager.getInstance(view.context).user.username
if (capture_imageAddlist.size >= 12 && trans_ID.text.toString().trim().isNotEmpty()) {
capture_imageAddlist.forEach {
Upload_Image_S3_Aws().uploadMultipleImageS3(
view.context,
it.url_image,
it.imgFileName,
username!!,
trans_id,
view
)
}
} else {
Toast.makeText(requireContext(), "Fill up all fields", Toast.LENGTH_LONG).show()
}
}