如何提供一个api接口能供第三方页面允许多个文件上传?

有这样一个场景,第三方前端需要调用我后端提供的一个能允许上传多个文件的接口。我按照文件上传技术文档,自己新建了一个controller,写了一个方法。接口通过postman能走通,但是接口中接收的文件类型是MultipartFile的,而实体中保存图片的属性类型是FileDescriptor,不知道这两个能互相转换吗?另外我在controller中注入的service也不能使用,是我哪里配置错误吗?框架中存在现有的功能能满足我的需求吗?
image
postman调用如下:
image

你好,CUBA的REST组件本身就支持单文件上传,参考:文件上传 - CUBA REST API

如果需要自定义controller,参考:创建带 OAuth2 保护的自定义控制器 - CUBA REST API

CUBA中文件上传的controller可以参考:com.haulmont.addon.restapi.api.controllers.FileUploadController

请问下自己新建的controller放在哪个模块下,我是放在web模块下的。但是controller中注入的bean都无法使用,如userSessionSource会报错,如下:
image
另外我按照文档上配置的 rest-dispatcher-spring.xml文件中也有个错误,如下:
image
劳烦帮忙解答下

放在web下是可以的。

你用的cuba哪个版本?

这个错不用管。

这里有示例:CUBA 应用程序中的 Rest API

使用的是7.2.20版本。使用注入的bean报错好像是 “没有绑定到当前线程的安全上下文”。这个是不是和请求接口时没token有关,但我程序是进去了,执行业务逻辑时出的错误。还有个问题,我写了一个测试页面获取 access token。但一直获取不到。如下:
image
image

这个错是用户无权使用rest服务。文档说明:
image

Rest 组件自带一个 rest-api-access 角色,你分配给admin应该就可以了。
image

7.2.20应该是没有这个问题的,看看这个帖子是否有帮助:7.2.12在mvc的Controller里调用Service出错No security context bound to the current thread - 问题反馈 - jmix.cn

按照你的解答已经可以获取access token了。不知道刚才那个controller中无法使用注入的bean是什么原因

我试着带着access token去访问controller中的方法试一试

1 个赞

我获取到access token后,能访问系统的FileUploadController,但后面会提示没有权限上传文件。我是admin的权限,是最大的,不该这样啊
image

文件上传是另一个权限。

image
你按照这个配置一个角色,分配给admin,重启试试。

刚才文件上传的可以了,而且按照手写AppContext.setSecurityContext的方式也能正常使用service了。就是到最后一步,报了一个没有权限创建FileDescriptor。在权限中没找到这个实体在哪里配置。我理解的admin是最大权限,为什么还要配置这么多权限
image

我在权限实体中也没有发现FileDescriptor选项。
image

REST 需要单独配置,因为是不同组件提供的权限。

需要看setSecurityContext 中用的是哪个用户的权限,如果是匿名用户,那么就需要给匿名用户配置权限,如果set的是admin的权限,应该就不用。

需要勾选 “系统级别”,然后可以在搜索框内输入 file,点击应用:
image

多谢提供帮助,已实现上传功能。

1 个赞