我正在尝试使用 Retrofit2 库将文件上传到服务器。我不希望文件被任何 header 或任何容器包围,我只想将原始文件发送到服务器。
我正在使用这个界面:
@PUT("JCExecPut/{typeUpload}/{fileId}")
@Headers("Content-Type: image/jpeg")
@Multipart
Call<ResponseBody> uploadFile(@Path("typeUpload")Integer typeUpload, @Path("fileId")String fileId, @Part RequestBody image);
我的上传功能:
public void uploadFileToServer(File file) {
RequestBody requestFile = RequestBody.create(MediaType.parse(mediaTypeString), file);
String idToUpload = UUID.randomUUID().toString();
Call<ResponseBody> call = service.uploadFile(11, idToUpload, requestFile);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
// Success
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
// Failure
}
});
}
事情是服务器总是会得到这样的文件实例
--ee3468c-eb4b-ff4-b59c-e09b08a4a25e
Content-Disposition: form-data; name="image"
Content-Transfer-Encoding: binary
Content-Type: image/jpeg
Content-Length: 46230
...
data image
...
--ee3468c-eb4b-ff4-b59c-e09b08a4a25e--
服务器的工作方式只需要数据镜像,而不需要所有容器数据--~~~---、内容配置等
我怎样才能实现这个目标?
(在这里为像我这样迷失的灵魂解答)
所以我就这样工作了,
1)像这样设置改造
@PUT
fun uploadFile(
@Url url: String,
@Header("Auth") authHeader: String = "IF_ANY", // note theres no need to mention content headers
@Body file: RequestBody
): Observable<ResponseBody>
2) 从代码附加文件
val requestFile = file.asRequestBody(YOUR_MEDIA_TYPE)
3) 只需使用 API url 和 file 调用您的方法//uploadFile(API_URL, requestFile)
我希望它可以帮助某人节省数小时的挣扎
我是一名优秀的程序员,十分优秀!