gpt4 book ai didi

java - 使用改进的多部分 POST 请求发送大文件时出错

转载 作者:太空宇宙 更新时间:2023-11-04 10:10:49 24 4
gpt4 key购买 nike

我正在使用 Retrofit2 库将数据发布到服务器,我需要使用 POST 请求上传文件或照片并获取其响应。所以我有两种方法:

  1. 将文件编码为 Base64 并将其作为帖子正文中的文本发送。
  2. 使用多部分请求并直接发送文件。

我尝试了它们,但在这两种方式中,我都有同样的问题:
当我发送小文件(例如小于 500 字节)时,我得到成功的结果。
但是当我发送大文件时就会出现问题。在超时结束之前我什么也得不到,在 AVD 中我得到了成功的响应(也在 Postman 中),但在真实设备(带有 Android 5.1 的 HTC 和带有 Android 7.0 的三星 S6)中,出现以下错误:

java.io.IOException:Connection{myIp:port, proxy=DIRECT@ hostAddress=/myIp:port cipherSuite=none protocol=http/1.1

上的流意外结束

调用方式:

@Multipart
@POST("uploaddata")
Call<ResponseBody> uploaddate(@Part("file") RequestBody filePart, @Part("token") RequestBody token,
@Part("type") RequestBody type, @Part("name")RequestBody name);

主要方法:

public void uploadImage(String type, File file, String name, String token, final DataInterface listener) {

RequestBody filePart = RequestBody.create(MediaType.parse("image/*"), file);
RequestBody tokenPart = RequestBody.create(MediaType.parse("text/plain"), token);
RequestBody namePart = RequestBody.create(MediaType.parse("text/plain"), name);
RequestBody typePart = RequestBody.create(MediaType.parse("text/plain"), type);

Call<ResponseBody> uploadData = apiInterface.uploaddate(filePart, tokenPart, typePart, namePart);
uploadData.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) {

listener.onResponseListener(response.body());

} else {

Log.e(TAG, "uploadData -----> response.isSuccessful == false");

}
}

@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e(TAG, "uploadData onFailure -----> " + t);
}
});
}

最佳答案

您可以发布错误的日志输出吗它是否返回了诸如大型二进制数据之类的东西??

试试这个:

@Multipart
@POST("uploaddata")
Call<ResponseBody> uploaddate(@Part MultiPart.Body filePart,
@Part("token") RequestBody token,
@Part("type") RequestBody type,
@Part("name")RequestBody name);

主要方法:

public void uploadImage(String type, File file, String name, String token, 
final DataInterface listener) {

RequestBody filePart = RequestBody.create(MediaType.parse("image/*"), file);
MultiPartBody.Part body = MultiPartBody.Part.createFormData("filePart",file.getName(),filePart);
RequestBody tokenPart = RequestBody.create(MediaType.parse("text/plain"), token);
RequestBody namePart = RequestBody.create(MediaType.parse("text/plain"), name);
RequestBody typePart = RequestBody.create(MediaType.parse("text/plain"), type);

Call<ResponseBody> uploadData = apiInterface.uploaddate(body, tokenPart, typePart, namePart);
uploadData.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) {

listener.onResponseListener(response.body());

} else {

Log.e(TAG, "uploadData -----> response.isSuccessful == false");

}
}

@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e(TAG, "uploadData onFailure -----> " + t);
}
});

}

关于java - 使用改进的多部分 POST 请求发送大文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52353404/

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