【发布时间】:2023-03-22 05:26:01
【问题描述】:
我想用其他 5 个参数在改造 API 上上传图像,我尝试了 stackoverflow 上列出的所有方法,但没有成功。我从服务器收到500 Internal Server Error 和{"message":"Unexpected token - in JSON at position 0"} 这个回复。我在 POSTMAN 中尝试过,但 API 在其中运行良好。你能告诉我哪里做错了吗?
接口代码。
@Multipart
@Headers({"Content-Type: application/json;charset=UTF-8"})
@POST("uploaddoc")
Call<UploadDocuments> uploadDocuments(@PartMap Map<String, RequestBody> requestBodyMap,
@Part MultipartBody.Part file,
@Header("Authorization") String auth);
API 调用在活动中。
private void uploadImage(String imagePath) {
File file = new File(imagePath);
RequestBody requestFile = RequestBody.create(file, MediaType.parse("multipart/form-data"));
MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
Map<String, RequestBody> requestBodyMap = new HashMap<>();
requestBodyMap.put("label", RequestBody.create(encryptedLabel, MediaType.parse("multipart/form-data")));
requestBodyMap.put("role", RequestBody.create(encryptedRole, MediaType.parse("multipart/form-data")));
requestBodyMap.put("userobjid", RequestBody.create(encryptedUserObjId, MediaType.parse("multipart/form-data")));
requestBodyMap.put("whichtype", RequestBody.create(encryptedWhichType, MediaType.parse("multipart/form-data")));
requestBodyMap.put("gsttype", RequestBody.create(encryptedGstinSpinner, MediaType.parse("multipart/form-data")));
Call<UploadDocuments> documentsCall = equibiz_api_interface.uploadDocuments(requestBodyMap, body,"Bearer " + AuthToken);
documentsCall.enqueue(new Callback<UploadDocuments>() {
@Override
public void onResponse(@NotNull Call<UploadDocuments> call, @NotNull Response<UploadDocuments> response) {
UploadDocuments uploadDocuments1 = response.body();
assert uploadDocuments1 != null;
if(response.isSuccessful())
Toast.makeText(VerificationActivity.this, response.message(), Toast.LENGTH_SHORT).show();
else{
try {
assert response.errorBody() != null;
Toast.makeText(VerificationActivity.this, response.errorBody().string(), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(@NotNull Call<UploadDocuments> call, @NotNull Throwable t) {
if (t instanceof SocketTimeoutException)
Toast.makeText(VerificationActivity.this, "Socket Time out. Please try again.", Toast.LENGTH_LONG).show();
else
Toast.makeText(VerificationActivity.this, t.toString(), Toast.LENGTH_LONG).show();
}
});
}
【问题讨论】:
-
“我在 POSTMAN 中尝试过,但 API 在其中运行良好” 如果您 edit 提出问题并在此处附上 Postman 屏幕截图,将会很有帮助。 500 Internal Server 指出您在服务器脚本中存在一些问题。所以,首先,在这里附上屏幕截图,我们会看看有什么问题。
-
@Shashanth 我已添加,请立即查看。
标签: java android file-upload retrofit2 multipart