我已经使用asp核心在服务器上编写了一个上传操作,我已经通过ARC对其进行了测试并收到了文件。
但是当我尝试使用Retrofit上传图片时,没有任何内容可以发送。即使表格是空的:
接口的源代码在这里。界面:
public interface QuestionWebService {
@Multipart
@POST("questionapi/uploadfiles")
Call<ResponseBody> uploadSync(@Part("fileUpload") RequestBody paramTypedFile);
}
以及异步任务中的用法:
@Override
protected Boolean doInBackground(String... params) {
File fileToSend = new File(params[0]);
// fileToSend.renameTo()
RequestBody typedFile = RequestBody.create(MediaType.parse("image/*"), fileToSend);
Response response = restClient.getQuestionService().uploadSync(typedFile).execute();
if (response == null){
Log.e(TAG, "success send server - failed");
return false;
}
if (response.isSuccessful()) {
Log.e(TAG, "success send server - 200 status");
} else {
Log.e(TAG, "success send server - fail status - " + response.toString());
}
} catch (Exception e) {
//throw new RuntimeException(e);
Log.e(TAG,e.getMessage().toString());
return false;
}
return true;
}
关于我应该尝试什么的任何想法?我哪里错了。 TG
答案 0 :(得分:3)
最后我找到了解决方案。我不知道为什么这段代码不起作用的原因,但正如this link所说,我改变了:
public interface QuestionWebService {
@Multipart
@POST("questionapi/uploadfiles")
Call<ResponseBody> uploadSync(@Part("fileUpload") RequestBody paramTypedFile);
}
到这一个:
public interface QuestionWebService {
@Multipart
@POST("questionapi/uploadfiles")
Call<ResponseBody> uploadSync(@Part("UserId") RequestBody UserId, @Part("answer") RequestBody answer, @Part MultipartBody.Part file);
}
及其用法:
RequestBody typedFile = RequestBody.create(MediaType.parse("image/*"), fileToSend);
Response response = restClient.getQuestionService().uploadSync(typedFile).execute();
到这一个:
// create RequestBody instance from file
RequestBody requestFile =
RequestBody.create(MediaType.parse("multipart/form-data"), fileToSend);
// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part body =
MultipartBody.Part.createFormData("fileUpload", fileToSend.getName(), requestFile);
RequestBody userId =
RequestBody.create(
MediaType.parse("multipart/form-data"), userIdString);
// add another part within the multipart request
String answerString = "hello, this is answer speaking";
RequestBody answer =
RequestBody.create(
MediaType.parse("multipart/form-data"), answerString);
Response response = restClient.getQuestionService().uploadSync(userId, answer, body).execute();
现在一切顺利! 我希望其他人遇到同样的问题。
现在服务器上的数据是一个包含2个字段的表单,UserId和Answer,以及一个名为fileUpload的文件。 TG