首页 > 解决方案 > 改造在使用动态标题时获取重复标题

问题描述

我正在尝试将照片上传到服务器,一切都很好,直到将我的标头通过参数传递复制到方法中。

我也使用过 HeaderMap 但仍然重复

public class ImageUploadHelper implements ImageUpload {

private static final int PERCENT_QUALITY = 100;

private Service mService;

public ImageUploadHelper(Retrofit retrofit) {
    mService = retrofit.create(Service.class);
}

private Observable<RequestBody> createUploadFunction(File file) {
    return Observable.create(emitter -> {
        try {
            Bitmap bmp = BitmapFactory.decodeFile(file.getAbsolutePath());
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, PERCENT_QUALITY, stream);
            byte[] buffer = stream.toByteArray();
            RequestBody requestBody = RequestBody
                    .create(MediaType.parse("application/octet-stream"), buffer);
            emitter.onNext(requestBody);
        } catch (Exception e) {
            emitter.onError(e);
        }
        emitter.onComplete();
    });
}

//@SuppressLint("MissingPermission")
@Override
public Observable<ImageUploadResponse> uploadImage(String rule, File file, Integer confirmId) {
    Location location = new Location(LocationManager.GPS_PROVIDER);
    String fileNames = file.getName();
    Observable<RequestBody> func = createUploadFunction(file);
    return func.flatMap(rb -> {
        String header = "name=file; filename=" + fileNames;
        return mService.uploadImage( rule,
                header,
                Integer.toString(confirmId),
                Double.toString(location.getLatitude()),
                Double.toString(location.getLongitude()),
                rb );
    });
}


interface Service {
    @Headers({"Content-Type: image/png"})
    @POST("query/{rule}/transaction/confirm/image")
    Observable<ImageUploadResponse> uploadImage(
            @Path("rule") String rule,
            @Header("Content-Disposition") String contentDisposition,
            @Header("Confirm-Id") String confirmId,
            @Header("Latitude") String latitude,
            @Header("Longitude") String longitude,
            @Body RequestBody photo);

}

}
  • I/NetModule: 内容类型: image/png
  • I/NetModule:内容长度:698803
  • I/NetModule: Content-Disposition: name=file;filename=15536​​68305157.jpg
  • I/NetModule:确认 ID:764
  • I/NetModule:纬度:0.0
  • I/NetModule:经度:0.0
  • I/NetModule: Content-Disposition: name=file;filename=15536​​68305157.jpg
  • I/NetModule:确认 ID:764
  • I/NetModule:纬度:0.0
  • I/NetModule: Longitude: 0.0 I/NetModule: Authorization: Bearer OToyZThiZWUzM2E4ZjQ1NzllODhkZjg0N2JkNmRmNjFkMGZhZTc1ZDQ4
    I/NetModule: --> END POST (binary 698803-byte body省略)
    I/NetModule: <-- 200, OK I/NetModule: Date: 2019 年 3 月
    06:32:01 GMT I/NetModule: 服务器: WSGIServer/0.2 CPython/3.6.7
    I/NetModule: Content-Type: application/octet-stream; charset=utf-8
    I/NetModule: Allow: POST, OPTIONS I/NetModule: X-Frame-Options:
    SAMEORIGIN I/NetModule: Content-Length: 75 I/NetModule: <-- END
    HTTP (二进制 75 字节正文省略)

标签: javaandroidretrofit

解决方案


推荐阅读