You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android设备通过Retrofit上传ImgBB图片失败:返回200但未上传

解决Retrofit上传图片到ImgBB返回200但未成功的问题

我帮你排查了代码里的几个关键问题,这些应该是导致图片没成功上传的核心原因:

1. 请求URL拼接错误

你的BASE_URLhttps://api.imgbb.com/1/,但PhotoService里的@POST("/upload")加了开头的斜杠。根据Retrofit的URL拼接规则:如果注解里的路径以/开头,会直接替换掉baseUrl最后一个/之后的部分。这意味着你实际请求的URL是https://api.imgbb.com/upload,而非正确的https://api.imgbb.com/1/upload

修复方法:去掉@POST路径开头的斜杠:

public interface PhotoService {
    @Multipart
    @POST("upload")
    Call<ResponseBody> uploadImage(@Query("key") String key, @Part MultipartBody.Part file );
}

2. RequestBody的MediaType设置错误

你给图片文件的RequestBody设置了MediaType.parse("multipart/form-data")——这是整个表单的类型,而非单个图片文件的类型。正确的做法应该指定图片的实际MIME类型,比如你用JPEG压缩的话,就用image/jpeg

修复方法:修改RequestBody的创建代码:

RequestBody requestFile = RequestBody.create(MediaType.parse("image/jpeg"), f);

3. Toast未执行显示操作(容易忽略的小问题)

你的Toast.makeText()后面都没调用.show()方法,所以不管上传成功还是失败,你都看不到任何提示,会误以为没有反馈:

修复方法:给每个Toast补充.show()

Toast.makeText(context, "I send photo", Toast.LENGTH_SHORT).show();
// 其他Toast同理添加.show()

额外优化建议

  • 调整图片压缩质量:你把JPEG的压缩质量设为0,这会导致图片质量极低,甚至可能无法被服务器正常识别。建议改成合理数值,比如80
    bitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos);
    
  • 打印响应内容:即使收到200状态码,也建议打印响应体的具体内容,看看ImgBB返回的信息(比如是否有隐藏的错误提示):
    @Override
    public void onResponse(Call call, Response response) {
        if (response.isSuccessful()) {
            try {
                String responseBody = response.body().string();
                Log.d("UploadDebug", "成功响应: " + responseBody);
                Toast.makeText(context, "上传成功", Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            try {
                String errorBody = response.errorBody().string();
                Log.d("UploadDebug", "错误响应: " + errorBody);
                Toast.makeText(context, "响应失败", Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

按照这些步骤修改后,应该就能成功上传图片到ImgBB了。

内容的提问来源于stack exchange,提问作者Mateusz

火山引擎 最新活动