有赞新零售社区

发帖
API使用问题»java 上传图片报错

[API调用-商品/交易] java 上传图片报错

何战杰 2022-06-30 1326 浏览 4 评论 | 只看楼主 [打印]
   关于java上传商品引发出的问题:
                我要上传商品--->就要上传图片--->上传图片报错
                上传图片按照官方文档,说是分组属性不用上传,我不上传,直接报null,我给你们找出来了,看图片
用手机打开
收藏 ··· 回复
    王广江   白银   2022-07-01 | 只看该作者
    您好,下面是一个可用的示例代码,您可以参考一下。
    //YouZanClient 建议全局唯一,使用 spring 容器管理
            YouZanClient yzClient = new DefaultYZClient();

            Token token = new Token("your token");


            YouzanMaterialsStoragePlatformImgUpload youzanMaterialsStoragePlatformImgUpload = new YouzanMaterialsStoragePlatformImgUpload();
            //创建参数对象,并设置参数
            YouzanMaterialsStoragePlatformImgUploadParams youzanMaterialsStoragePlatformImgUploadParams = new YouzanMaterialsStoragePlatformImgUploadParams();
            //youzanMaterialsStoragePlatformImgUploadParams.setCategoryId((long) 0);
            youzanMaterialsStoragePlatformImgUploadParams.setImage(new File("/Users/wangguangjiang/Downloads/logs.png"));
            youzanMaterialsStoragePlatformImgUpload.setAPIParams(youzanMaterialsStoragePlatformImgUploadParams);

            YouzanMaterialsStoragePlatformImgUploadResult resultimg = yzClient.invoke(youzanMaterialsStoragePlatformImgUpload, token, YouzanMaterialsStoragePlatformImgUploadResult.class);
    • 何战杰 2022-07-01
      {"code":160400241,"data":null,"success":false,"message":"分组不存在","requestId":null,"traceId":"yz7-0ad26a54-1656581881276-19826"}
      该试的我都试了,而且代码我重载了toParams方法,哪怕不传不报错,也是返回分组不存在,所以这是个必传字段。
    • 何战杰 2022-07-01
      你们的开发跑过没,这一遍都走不通的东西拿出来干啥?

    王广江   白银   2022-07-01 | 只看该作者
    您好,
    1、traceid:yz7-0ad26a54-1656581881276-19826 网关上看到category_id入参是0,报错是正常的一个响应。
    2、针对您反馈的sdk的问题,建议解决方案:更新SDK后,再重试一下。
    更新SDK可以参考文档:https://doc.youzanyun.com/resource/doc/3709
    • 何战杰 2022-07-01
      我知道报错是正常,就是接口通了,业务没通,我就是来接业务的啊,即便接口通了,我还是没获取到图片上传ID啊。
    • 何战杰 2022-07-01
      这是我将maven最新的包反编译,所以你们更新最新的吧,我找不到比这更新的
      private Request buildPostRequest(RequestParameter requestParameter) {
          RequestBody requestBody;
          String url = buildPostUpUrl(requestParameter);
          if (requestParameter.isHasFile()) {
            MultipartBody.Builder builder = (new MultipartBody.Builder()).setType(MultipartBody.FORM);
            Map<String, Object> objectMap = requestParameter.getData();
            for (Map.Entry<String, Object> entry : objectMap.entrySet()) {
              String key = entry.getKey();
              Object value = entry.getValue();//这里判断了,应该是可以的,估计是SDK的版本问题,官网说可以使用下载SDK,流程没毛病啊
              if (null == value)
                continue;
              if (value instanceof File) {
                File file = (File)value;
                byte[] bytes = new byte[0];
                try {
                  bytes = Files.readAllBytes(file.toPath());
                } catch (IOException e) {
                  System.err.println("file upload IOException");
                }
                builder.addFormDataPart(key, file.getName(),
                    RequestBody.create(MediaType.parse("application/octet-stream"), bytes));
                continue;
              }
              builder.addFormDataPart(key, value.toString()); //这行报错,通过反射获取所有属性,肯定有为NULL的啊
            }
            MultipartBody multipartBody = builder.build();
          } else {
            String postBody = JSON.toJSONString(requestParameter.getData());
            requestBody = RequestBody.create(MediaType.parse("application/json;charset=UTF-8"), postBody);
          }
          return (new Request.Builder())
            .url(url)
            .headers(requestParameter.getHeaders())
            .post(requestBody)
            .build();
        }

    王广江   白银   2022-07-01 | 只看该作者

    您好,这边上传图片使用SDK都是OK的。您可以提供一下具体的maven的信息,这边看一下。
    • 何战杰 2022-07-01
      两个版本都使用过,一个是maven,一个下载的sdk      
      <!--youzan-->
      <!--        <dependency>-->
      <!--            <groupId>com.youzan.cloud</groupId>-->
      <!--            <artifactId>open-sdk-core</artifactId>-->
      <!--            <version>1.0.22-RELEASE</version>-->
      <!--        </dependency>-->
              <dependency>
                  <groupId>com.youzan.cloud</groupId>
                  <artifactId>open-sdk-core</artifactId>
                  <version>1.0.21-RELEASE</version>
                  <scope>system</scope>
                  <systemPath>${project.basedir}/src/main/lib/open-sdk-core-1.0.21-RELEASE.jar</systemPath>
              </dependency>
    • 何战杰 2022-07-01
      还有个事maven引入只能使用基本类啊,其他的很多类无法引入(下载的可以),maven和下载的不应该一样吗,这用起来很费劲啊,SDK都没有固定统一版本
    • 何战杰 2022-07-01
      兄弟可以了吗,我们老板催我,我就得问你
    • 何战杰 回复 何战杰 2022-07-01
      其他的      
      <dependency>
                  <groupId>com.youzan.cloud</groupId>
                  <artifactId>open-sdk-gen</artifactId>
                  <version>1.0.22.10000939202206301458-RELEASE</version>
                  <scope>system</scope>
                  <systemPath>${project.basedir}/src/main/lib/open-sdk-gen-1.0.22.10000939202206301458-RELEASE.jar</systemPath>
              </dependency>
              <dependency>
                  <groupId>com.youzan.cloud</groupId>
                  <artifactId>open-sdk-api</artifactId>
                  <version>1.0.12-RELEASE</version>
                  <scope>system</scope>
                  <systemPath>${project.basedir}/src/main/lib/open-sdk-api-1.0.12-RELEASE.jar</systemPath>
              </dependency>
              <dependency>
                  <groupId>com.youzan.cloud</groupId>
                  <artifactId>open-sdk-common</artifactId>
                  <version>1.0.12-RELEASE</version>
                  <scope>system</scope>
                  <systemPath>${project.basedir}/src/main/lib/open-sdk-common-1.0.12-RELEASE.jar</systemPath>
              </dependency>

    王广江   白银   2022-07-01 | 只看该作者
    您好,辛苦升级一下 open-sdk-core 版本至 1.0.25-RELEASE。再重试看一下。

    1跳至
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    复制链接
    新浪微博
    QQ空间
    微信扫码
    • 回复

    • 评分

    客服工作时间是9:00-18:00,客服妹子当前不在线,若不能及时回复请谅解。试试右上角的搜索吧,论坛有丰富的经验贴、公告贴,相信一定能够帮到您~

    复制成功