我有一个文件,我想将其从Android发送到Spring Backend。在Spring收到映像后,我将通过生成UUID并将其上载到AWS S3来更改映像的名称。我的问题是我得到空值作为响应。
Android Side->
我的Android上传文件功能->
private void UploadFiles() {
File uploadFile = fileArrayList.get(0);
if (uploadFile != null) {
Log.d(TAG, "UploadFiles: File Name is -> " + uploadFile.getName());
// cropImageRequest.setCropId(uploadFile.getParentFile().getName());
// Parsing any Media type file
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), uploadFile);
// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part cropImage = MultipartBody.Part.createFormData("cropImage", uploadFile.getName(), requestFile);
Api.uploadCropImage(cropImage, new Callback<BasicResponse>() {
@Override
public void onResponse(Call<BasicResponse> call, Response<BasicResponse> response) {
if (response.body() != null) {
Log.d(TAG, "onResponse: Success" + response.body().getResponse());
}
else{
Log.d(TAG, "onResponse: null Response");
}
}
@Override
public void onFailure(Call<BasicResponse> call, Throwable t) {
Log.d(TAG, "onResponse: Failure");
}
});
}
}
** uploadImageFunction-> **
public static void uploadCropImage(MultipartBody.Part cropImage, Callback<BasicResponse> callback) {
UploadCropImageApi uploadCropImageApi = retrofit.create(UploadCropImageApi.class);
Call<BasicResponse> call = uploadCropImageApi.uploadCropImage(cropImage);
call.enqueue(callback);
}
我的界面->
public interface UploadCropImageApi {
@Multipart
@POST(UPLOAD_FILE_TO_AWS_URL)
Call<BasicResponse> uploadCropImage(@Part MultipartBody.Part cropImage);
}
这是我的Spring文件->
@RequestMapping(value = "/UploadCropImage", method = RequestMethod.POST, consumes = {"multipart/form-data"})
@ResponseBody
public String UploadImage(@RequestBody MultipartFile cropImage,HttpServletRequest request) {
mAmazonClient = AmazonClient.GetAmazonClientInstance();
UUIDUtils uuid = new UUIDUtils();
try {
System.out.println(cropImage);
String KeyName = uuid.GenerateUUID(cropImage.getName());
String Code = mAmazonClient.uploadImage(KeyName, cropImage);
System.out.println(Code);
return Code;
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
return null;
}
}
此控制器正在打印以下值->
org.springframework.web.multipart.commons.CommonsMultipartFile@b0b5de0
File Name is -: cropImage
null
我的问题是,如您所见,Retrofit发送的文件和Spring接收的文件都不为空,我正在通过AWS发送该文件,但它没有上传文件并返回null作为值。但是当我使用POSTMAN时,它很容易将文件发送到AWS并返回KeyName。
好的,所以我调试了一点,然后在上传图像文件时发现了一个异常。唯一的例外是->文件名,目录名或卷标语法不正确。
答案 0 :(得分:2)
您的例外情况表明您的文件名有问题。问题是命名约定,因为它正在上载包含“:”符号的文件名,并且可能还有其他符号也未被AWS接受。因此,只需更改文件名,并用_(Underscore)符号而不是“”(space),(:)和其他符号来分隔名称。这将成功将文件上传到AWS。希望对您有所帮助。