OpenAPI方式上传图片并给单据图片字段赋值

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

OpenAPI方式上传图片并给单据图片字段赋值

1 业务背景

现场想通过openapi传外部系统图片到星瀚单据的图片字段,例如,物料的图片字段

2 思路与方案

操作API(零代码)方式目前是不能完全支持。

1、需要通过自定义api的方式先上传图片的文件服务器

// 先获取图片上传服务

FileService imageFileService = FileServiceFactory.getImageFileService();

// 字节流转文件流

InputStream input = new ByteArrayInputStream(file1.getFileData());

// 构造FileItem对象

FileItem var1 = new FileItem("文件名","相对路径","文件流");

// 上传图片

String path = imageFileService.upload(var1);

2、自定义api返回图片的path,赋值给单据的图片字段


3 实现过程

1、创建自定义api插件类,编写相关代码,参考:文件流处理接口

@ApiController(value = "dev", desc = "自定义API Demo样例2")
@ApiMapping(value = "wfb/upload")
public class CustomUploadFileController {
    @ApiPostMapping(value = "/uploadImage", desc = "上传文件流")
    public CustomApiResult<String> uploadFile(@NotNull @ApiParam("订单号") String billNo, @ApiParam("文件流") OpenApiFile file1) {
        if (StringUtil.isEmpty(billNo) || file1 == null || file1.getFileData() == null) {
            //手动设置http状态码406
         ServiceApiContext.getResponse().setHttpStatus(HttpStatus.NOT_ACCEPTABLE.getStatusCode());
            //返回失败错误码:errorCode:900101(业务自行约定)  & status=false
            return CustomApiResult.fail("900101", "订单号billNo及文件流file1不能为空。");
        }
        //构造相对路径:租户id/账户id/日期/202407/应用编码/单据编码/images/uuid/文件名
        StringBuffer relativePath = new StringBuffer();
        RequestContext requestContext = RequestContext.get();
        relativePath.append(requestContext.getTenantId());
        relativePath.append("/");
        relativePath.append(requestContext.getAccountId());
        relativePath.append("/");
        relativePath.append("0703");
        relativePath.append("/");
        relativePath.append("kdec_case01");
        relativePath.append("/");
        relativePath.append("kdec_bill0701");
        relativePath.append("/");
        relativePath.append("images");
        relativePath.append("/");
        relativePath.append(UUID.randomUUID());
        relativePath.append("/");
        relativePath.append(file1.getFileName());
        // 先获取图片上传服务
        FileService imageFileService = FileServiceFactory.getImageFileService();
        // 字节流转文件流
        InputStream sbs = new ByteArrayInputStream(file1.getFileData());
        // 构造FileItem对象
        FileItem var1 = new FileItem(file1.getFileName(),relativePath,sbs);
        // 上传图片
        String path = imageFileService.upload(var1);
        return CustomApiResult.success(path);
    }
}

2、创建自定义api接口

3、通过postman或其他客户端测试,第三方图片上传并返回图片path;不了解api调用流程请学习:金蝶云苍穹OpenAPI调用流程

4、把步骤返回的图片路径对应的值path,赋值给单据中的图片字段


5、查看单据数据信息

4 注意事项

1、案例介绍是通过两个api接口实现了图片的上传和绑定到单据图片字段中:自定义api(上传图片)+ 操作服务(保存单据)

2、构造FileItem对象中的参数相对路径需要包含文件名,格式可以参考文件服务的标准格式

格式:租户id/账户id/日期/202407/应用编码/单据编码/images/uuid/文件名

FileItem var1 = new FileItem("文件名","相对路径","文件流");

5 相关资料(可选)

开放平台(openAPI)

文件流处理接口

附件二开常见问题汇总












OpenAPI方式上传图片并给单据图片字段赋值

1 业务背景现场想通过openapi传外部系统图片到星瀚单据的图片字段,例如,物料的图片字段2 思路与方案操作API(零代码)方式目前是不能完...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息