作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 fragment ,我点击浏览按钮并打开文件管理器并选择文件并通过 POST Retrofit2 将其发送到服务器。
我收到成功消息 200。文件在服务器中列出,但无法打开。 大小为1kb。所以,我认为文件没有正确上传。
以下是我的代码。
我哪里错了?
File origFile = new File(PathHolder);
String getDirPath = origFile.getParent();
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), getDirPath);
multipartBody = MultipartBody.Part.createFormData("uploadFiles",origFile.getName(),requestFile);
new UploadFileAsyncTask().execute();
异步任务是
protected notificationVO doInBackground(Void... params) {
notificationVO res;
WebserviceImpl webservices = new WebserviceImpl();
res = webservices.notifyAttachment(token,multipartBody, getContext());
Log.e("File","browse uploaded");
return res;
}
应用程序接口(interface)
@Multipart
@POST("upload")
public Call<notificationVO>notifyAttachment(@Query("token")String token,
@Part MultipartBody.Part attachFile); // @Part MultipartBody.Part file
实现
public notificationVO notifyAttachment(String token,MultipartBody.Part fileUri,final Context context){
WebservicesApi mRestAPIWService = ApiUtilsForWS.getAPIService(context,);
Call<notificationVO> call = mRestAPIWService.notifyAttachment(token,fileUri);
try {
Response<notificationVO> response = call.execute();
if(response.isSuccessful())
{
Log.e(TAG,"Success."+response.code());
return response.body();
}
else
{
Log.e(TAG,"Failed."+response.code());
return null;
}
} catch (IOException e1) {
e1.printStackTrace();
return null;
}
}
最佳答案
使用如下所示的界面,删除@Query 注释添加为界面中的@Part。
interface Service {
@Multipart
@POST("upload")
Call<notificationVO> postImage(@Part MultipartBody.Part image, @Part("token") RequestBody name);
}
检查您的文件路径是否有效,并检查文件大小以确认您从文件选择器中正确获取文件。
File origFile = new File(PathHolder);
int file_size = Integer.parseInt(String.valueOf(origFile .length()/1024));
如果一切正常,请尝试使用下面的选项上传您的文件,它会起作用
RequestBody mFile = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("file", file.getName(), mFile);
RequestBody token = RequestBody.create(MediaType.parse("text/plain"), file.getName());
// Service is interface name you can use your own interface name
Service uploadImage = retrofit.create(Service.class);
Call<notificationVO> fileUpload = uploadImage.postImage(fileToUpload, token);
fileUpload.enqueue(new Callback<notificationVO>() {
@Override
public void onResponse(Call<notificationVO> call, Response<notificationVO> response) {
}
@Override
public void onFailure(Call<notificationVO> call, Throwable t) {
}
});
关于android - 完整文件不会在 Retrofit2 上上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48341985/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!