当前位置: 首页 > 知识库问答 >
问题:

如何从Android设备上传照片?

长孙泉
2023-03-14
public class PhotoNetworkClient {

    public static final String KEY_API="my_key";
    private static final String BASE_URL = "https://api.imgbb.com/1/";
    private static Retrofit retrofit;

    public static Retrofit getRetrofitClient(Context context) {
        if (retrofit == null) {
            OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    .build();
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(okHttpClient)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}
public interface PhotoService {
    @Multipart()
    @POST("/upload")
    Call<ResponseBody> uploadImage(@Query("key") String key, @Part() MultipartBody.Part file );
}
public static void testExecute(Bitmap bitmap, Context context) throws IOException {
    //Convert bitmap to byte array
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 0 /*ignored for PNG*/, bos);
    byte[] bitmapData = bos.toByteArray();
    //create file
    String currentDate = new SimpleDateFormat("ddMMyyyy_HHmmss", Locale.getDefault()).format(new Date());
    File f = new File(context.getCacheDir(), "temp_"+currentDate );
    f.createNewFile();
    FileOutputStream fos = new FileOutputStream(f);
    fos.write(bitmapData);
    fos.flush();
    fos.close();

    Retrofit retrofit = PhotoNetworkClient.getRetrofitClient(context);
    PhotoService uploadAPIs = retrofit.create(PhotoService.class);

    RequestBody requestFile =  RequestBody.create(MediaType.parse("multipart/form-data"), f);
    MultipartBody.Part body = MultipartBody.Part.createFormData("image", f.getName(), requestFile);
    Call call = uploadAPIs.uploadImage(PhotoNetworkClient.KEY_API,body);
    call.enqueue(new Callback() {
        @Override
        public void onResponse(Call call, Response response) {
            if (response.isSuccessful())
                Toast.makeText(context, "I send photo", Toast.LENGTH_SHORT);
            else
                Toast.makeText(context, "response isn't successful", Toast.LENGTH_SHORT);
        }
        @Override
        public void onFailure(Call call, Throwable t) {
            Toast.makeText(context, "on failure", Toast.LENGTH_SHORT);
        }
    });
}

});

我收到代码为200的响应,但图像没有上传到服务器

共有1个答案

呼延承平
2023-03-14

但是我实际上也在搜索一些使用ImgBB API的例子。

最后我设法上传了图像--我使用的代码和你的代码非常相似,只是有一点小的变化:

不要在基URL中包含“1”参数,把它留在post中。这就解决了我的问题。

BASE_URL = "https://api.imgbb.com"

@POST("/1/upload")
 类似资料:
  • 我正在尝试从sdcard拍摄照片,它是工作的情况下,当用户选择从谷歌照片,但给出一个curserindexoutofbound错误时,从任何其他应用程序,如gallery或file Manager。这是一段代码。 OnActivity Result`{if(requestCode==PICK_IMAGE_REQUEST&&resultCode==activity.result_ok&data!=n

  • 我使用Flickrj-Android-2.0.0,并遵循OAuth流程。我也得到了访问令牌和秘密,但当我试图在flickr上传照片时,我得到了这个错误: 谢谢...

  • 我正试图从我的android设备上传文件到php服务器,但服务器没有收到任何文件。这是我的示例代码,我在网上找到的。php服务器,我正在通过chunk上传文件 我的Android代码 PHP Server文件上传中的代码,我是通过块完成文件上传的,请谁帮我发送正确的代码文件通过块上传和相关的android文件上传代码

  • 问题内容: 我正在尝试将文件从我的Android设备上传到php服务器,但服务器未收到任何文件。这是我的示例代码,我在线找到了。php服务器,我正在通过块上传文件 我的Android代码 PHP Server代码在文件上传中,我已经完成了通过块进行文件上传,请有人帮助我通过块和相关的android文件上传代码发送正确的代码文件 问题答案: 我不知道您的代码,但是为您提供了两个有效的代码:这适用于所

  • 可以通过蓝牙传输音频吗?在我的研究中,我发现只有使用A2DP(高级音频分布配置文件)才有可能。每个Android设备都支持A2DP吗?如果没有,是否可以使用蓝牙在两个Android设备之间传输音频?请帮我理解这一点。 我浏览了以下链接: 在Android中通过蓝牙接收音频, 谷歌确认蓝牙音频流修复下一个版本的Android 4.2 如何通过蓝牙从另一台设备流式传输音频?

  • 我尝试了DPZFlickr,它在尝试上传时返回以下内容: 检查Flickr API的响应,它与尝试Dantsu版本的phpFlickr时返回的结果相同,返回如下: 我卷了自己的卷曲,返回如下: