安卓工作室 Volley 发布 base64 图像错误 [ 凌空: [232] NetworkUtility.shouldRetryException: 意外响应代码 400 for "url" ]



我想上传图像并将其编码为base64字符串,将其放入json数据中,然后使用截击发布。

使用下面的代码,我可以发布PNG图像,并可以将其保存在服务器端,但如果我上传jpeg或其他类型的图像,我会出现错误[E/Volley:[232]NetworkUtility.sshouldRetryException:的意外响应代码400,无法上传图像。232有时变为231。

我不知道为什么我可以上传png,但不能上传其他类型的图像。

对不起,我的英语不好。我很感激你的帮助。非常感谢。

// MainActivity.kt
class MainActivity : AppCompatActivity() {
private var imageData: ByteArray? = null
companion object{
private val IMAGE_PICK_CODE = 999
private lateinit var imageView: ImageView
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_recipe_create)
// Upload Image
upload.setOnClickListener {
imageView = icon
launchGallery()
}
submit.setOnClickListener {
val url = "https://www.hamary.net/recipe/api/create"
val postData = JSONObject()
postData.put("imageData", Base64.encodeToString(imageData, Base64.NO_WRAP))
val getUserInfoRequest = JsonObjectRequest(
Request.Method.POST,
url,
postData,
{ response ->
Log.v("response", response.toString())
},
{ error ->
Log.e("volley_error", error.toString())
}
)
MySingleton.getInstance(this).addToRequestQueue(getUserInfoRequest)
}
}
}
private fun launchGallery() {
val intent = Intent(Intent.ACTION_PICK)
intent.type = "image/*"
startActivityForResult(intent, IMAGE_PICK_CODE)
}
@Throws(IOException::class)
private fun createImageData(uri: Uri)
{
val inputStream = contentResolver.openInputStream(uri)
inputStream?.buffered()?.use{
imageData = it.readBytes()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(resultCode == Activity.RESULT_OK && requestCode == IMAGE_PICK_CODE)
{
val uri = data?.data
if(uri != null){
imageView.setImageURI(uri)
createImageData(uri)
}
}
super.onActivityResult(requestCode, resultCode, data)
}
}

我认为您面临此错误是因为base64无效,尝试这种方式在base64中转换,然后在请求中发送

onActivityResult 内部

Uri uri = data.getData();
toBase64(uri)

将图像uri发送到此函数,此函数将您的图像转换为base64,无论您从库中选择哪种类型的图像


public String toBase64(Uri contentURI) {
Bitmap bitmap=MediaStore.Images.Media.getBitmap(getContentResolver(), contentURI);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, 3508, 2480, false);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
resizedBitmap.compress(Bitmap.CompressFormat.PNG, 90, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
return Base64.encodeToString(byteArray, Base64.DEFAULT);
}

相关内容

  • 没有找到相关文章

最新更新