gpt4 book ai didi

Android Retrofit上传图片文件使用multipart请求

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:44 26 4
gpt4 key购买 nike

我是 android retrofit 的新手,需要使用多部分请求格式上传图像文件。我能够使用 iphone 多部分请求成功上传。但是,在进行 android 改造时遇到了麻烦。我使用 https 和 token 持有者授权。

@Multipart
@POST("/Api/ApiSales/UploadImages")
void uploadImage(@Part("File") TypedFile file,
Callback<Response> callback);

RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint(appController.getInstance().getURL());
builder.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Authorization", appController.getInstance().getAuthTokenString());
}
});
builder.setLogLevel(RestAdapter.LogLevel.FULL);

RestAdapter restAdapter = builder.build();

RetrofitService service = restAdapter.create(RetrofitService.class);
service.uploadImage(new TypedFile("image/png",toFile), new Callback<retrofit.client.Response>() {
@Override
public void success(retrofit.client.Response response, retrofit.client.Response response2) {
Log.i(TAG, response.toString());
}

@Override
public void failure(RetrofitError error) {
Log.e(TAG, error.toString());
}
});

出现以下错误:

retrofit.RetrofitError: Write error: ssl=0x5ef8ad40: I/O error during system call, Connection reset by peer      

我为 http 请求设置了服务器,仍然有错误:

  retrofit.RetrofitError: sendto failed: ECONNRESET (Connection reset by peer)

最佳答案

我觉得你的界面应该是这样的

 @Multipart
@POST("/Api/ApiSales/UploadImages")
void uploadImage(@Header("Authorization") String user,
@Part("File") TypedFile file, Callback<Response> callback);

你应该首先从 onActivityResult 获取你的真实图像路径

final String imagePath = getRealPathFromURI(imageUri);

getRealPathFromURI 将是这样的。

private String getRealPathFromURI(Uri contentUri) {
String[] projection = {MediaStore.Images.Media.DATA};
CursorLoader loader = new CursorLoader(this, contentUri, projection, null, null, null);
Cursor cursor = loader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String result = cursor.getString(column_index);
cursor.close();
return result;
}

以及您的 TypedFile 的初始化

File photoFile = new File(imagePath);// image will be your real path
String mimeType = getMimeType(imagePath);
TypedFile photoTypedFile;
if (mimeType != null) {
photoTypedFile = new TypedFile(mimeType, photoFile);
} else {
photoTypedFile = new TypedFile("image/jpg", photoFile);
}

除了添加 header 外,您的 Restadapter 初始化将是相同的,您的调用将是这样。

RetrofitService service = restAdapter.create(RetrofitService.class);
service.uploadImage("yourAuthorization", photoTypedFil, new Callback<retrofit.client.Response>() {
@Override
public void success(retrofit.client.Response response, retrofit.client.Response response2) {
Log.i(TAG, response.toString());
}

@Override
public void failure(RetrofitError error) {
Log.e(TAG, error.toString());
}
});

关于Android Retrofit上传图片文件使用multipart请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27629775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com