繁体   English   中英

发送Java Spring的最RESTful文件

[英]The most RESTful file sending Java Spring

在我的应用中,我需要可以上传(或向用户发送一些文件)的功能。 现在,我的控制器如下:(仅用于上传)

@RestController
@RequestMapping(value = "/upload")
public class UploadController {
    @RequestMapping(value = "", method = RequestMethod.POST)
    public void uploadFile(@RequestParam(value = "name") final String name, @RequestParam("file") MultipartFile file, HttpServletResponse response){
        try {
            if(!file.isEmpty()){
                byte[] bytes = file.getBytes();
                BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(new File(name + ".mp3")));
                outputStream.write(bytes);
                outputStream.close();
                response.setStatus(HttpServletResponse.SC_NO_CONTENT);
            }
        } catch (Exception e) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
        }
    }
}

因此,它实际上等于spring.io页面上教程的控制器。 (认为​​这只是针对测试的预版本-我知道逻辑应该移至@Service的等)

但是我的问题是-因为我发现它不是RESTful方法,因为要上传此文件(至少对于浏览器客户端而言),我必须制作一个将名称和文件发布到/ upload url的表格-我想知道如何我可以做得更RESTful吗?

我听说apache commons有一些有用的上传库,但是不知道在这里是否有用。

有什么建议么?

顺便说一句:您对我有什么建议,如何通过RESTful Web服务处理文件? 发送多个文件呢?

我们用于设计用于上传文件的静态服务的方式如下:您可以使用“文件”之类的名称来描述您的文件资源集合,或者使用更具体的名称,例如“视频”(如果它通常不涉及文件) 。 然后发布到/ files会将文件添加到该集合中,就像REST发布应该做的那样。 可以在以base64格式编码的帖子正文中传递文件。 在/ files / {id}中执行GET将会再次以base64字符串形式检索文件。 我们的请求和响应使用JSON,但是您可以使用任何喜欢的字符串。

任何要调用您的Rest服务的网站都必须包含您所说的形式,并且接收文件的上载方法会将其从bytes []转换为base64编码的字符串,然后调用Restful服务。 任何android客户端都可以从手机中获取文件,将其转换为base64字符串,并也使用该服务发送该文件等。

但是,如果您只想在自己的网站上使用该功能,那么上述建议就太多了。 在那种情况下,我建议您保持原样,因为无论如何都无法避免从表单加载文件的上载部分,并且无需为了本书的RESTful而引入中间的服务级别。 从经验中,我经常发现很难映射到RESTful操作的各种操作(例如,复杂的操作或管理操作),并且拥有简洁整洁的设计通常比严格遵循约定更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM