gpt4 book ai didi

android - 完整文件不会在 Retrofit2 上上传

转载 作者:行者123 更新时间:2023-11-30 00:09:45 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com