我有此文件,界面和过程。 我试图将图像上传到服务器,但我只发送表单数据。图片已消失,未上传。我做错了什么?
public interface ClientRoute {
@Multipart
@POST("attendance/in")
Call < DataAttendance > inAttendance(
@PartMap Map < String, RequestBody > partMap,
@HeaderMap Map < String, String > headers);
}
此void
需要使用第三方datetime API中的时间日期,如果成功,程序将执行上传过程。该代码有效,但仅表单数据(如文本)有效。
public void inAttendance(int userId, String token, int storeId, String timeAttendance, String photoPath, int refId,
double latitude, double longitude) {
timeController.getTimeaAsync("yyyy-MM-dd HH:mm:ss", false, new TimeInterface() {
@Override
public void onSuccess(@NonNull String value) {
Map < String, RequestBody > params = new HashMap < > ();
params.put("storeId", requestBody(String.valueOf(storeId)));
params.put("time_attendance", requestBody(value));
params.put("refId", requestBody(String.valueOf(refId)));
params.put("photo", RequestBody.create(MediaType.parse("image/*"), photoPath));
params.put("latitude", requestBody(String.valueOf(latitude)));
params.put("longitude", requestBody(String.valueOf(longitude)));
Map < String, String > headers = new HashMap < > ();
headers.put("userId", String.valueOf(userId));
headers.put("token", token);
clientRoute = ClientUtils.getClientRoute();
clientRoute.inAttendance(params, headers).enqueue(new Callback < DataAttendance > () {
@Override
public void onResponse(Call < DataAttendance > call, Response < DataAttendance > response) {
Log.i(TAG, "Response code: " + response.raw().code() + "\r\n" +
"Request url: " + response.raw().request().url() + "\r\n");
if (!response.isSuccessful() || response.body() == null) {
try {
Log.e(TAG, response.errorBody().string());
} catch (IOException e) {
e.printStackTrace();
}
return;
}
DataAttendance dataAttendance = response.body();
if (dataAttendance.getStatusCode() == 0) {
return;
}
Toast.makeText(context, "Attendance ID: " + dataAttendance.getStatusCode(), Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call < DataAttendance > call, Throwable t) {
Log.e(TAG, "onFailure: " + t);
}
});
}
@Override
public void onError(@NonNull Throwable throwable) {
}
}, false);
}
private RequestBody requestBody(String value) {
return RequestBody.create(MediaType.parse("text/plain"), value);
}
我尝试查找丢失的参数或错字,但没有找到。服务器所需的所有参数均正确。但是图像文件不会上传。有人愿意帮助我吗?我真的很感激。
答案 0 :(得分:0)
使用此代码获取图像路径
File file = new File(String.valueOf(uriFilePath.getPath()));
RequestBody requestFile =
RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part body =
MultipartBody.Part.createFormData("image", file.getName(), requestFile);
在API接口中
@Part MultipartBody.Part image
答案 1 :(得分:0)
我认为您无法成功从存储中获取图像文件。因此,请检查我的以下代码链接