retrofit图片上传,需要添加必填的参数,参数服务器收不到怎么办?

发布于 2022-09-03 09:43:55 字数 1767 浏览 16 评论 0

用retrofit封装了一个图片上传,但是服务器除了要求上传图片还要求上传一些text内容,想用一个@PartMap 封装起来,结果参数无法传到服务器,服务器一直返回上传的参数找不到....求各位大神帮忙看一下

public Observable<T> uploadImage(final String url, final Map<String, File> files, final Map<String,String> values, Class<T> clazz

        , Scheduler subscribeScheduler, Scheduler observeScheduler){
    return new Proxy<T>(){
        @Override
        Call<String> makeCall() {
            Map<String, RequestBody> map = new HashMap<>();
            //这里是把传入的图片和参数封装到一个Map<String,requestBody>里面
            for(Map.Entry<String, File> entry : files.entrySet()){
                map.put( "image\";filename=\"" + entry.getKey()
                        ,RequestBody.create(MediaType.parse("image/*"),entry.getValue()));
            }
            for(Map.Entry<String, String> entry1 : values.entrySet()){
                map.put(entry1.getKey()
                        ,RequestBody.create(MediaType.parse("plain/text"),String.valueOf(entry1.getValue())));
            }
            return retrofit.create(HttpServiceRest.class).uploadImage(url,map);
        }

        @Override
        void onNext(Subscriber<? super T> subscriber, T result) {
            subscriber.onNext(result);
        }

        @Override
        void onError(Subscriber<? super T> subscriber) {
            subscriber.onError(new IllegalAccessException(HttpErrorCode.ERROR_UPLOADIAMGE));
        }
    }.create(subscribeScheduler,observeScheduler,clazz);
}


接口

/**

 *  图片文件上传
 * @param url
 * @param values
 * @return
 */
@POST
@Multipart
Call<String> uploadImage(@Url String url,@PartMap Map<String, RequestBody> files);    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文