Spring MVC Spring中的多部分文件下载?,

w8rqjzmb  于 2023-01-26  发布在  Spring
关注(0)|答案(1)|浏览(125)

我正在开发一个应用程序,从我的服务器做一些mp3流。我希望用户不要下载整个mp3文件,所以字节部分写入响应的OutputStream。
我知道这也与HTTP头和范围有关,所以我找到了this class,它应该可以工作。
然而,我使用的是Spring MVC控制器,它似乎没有按预期工作:文件已完全下载,并且在一个用户请求中有两个提交给控制器的请求,但以下情况除外:

java.net.SocketException: Connection reset by peer: socket write error

我知道CommonsMultipartResolver的存在,但是我所发现的都是用于上传文件,而不是下载。我的问题是,Spring中有什么东西可以轻松地做到这一点吗?
PD:我在使用上面提到的类的地方附加了代码

@RequestMapping(value = "merge/{name:.+\\.mp3}")
    public void playMerged( @PathVariable("name") String audioName, HttpServletRequest request,
            HttpServletResponse response) {
            String mergedAudioPath = service.getMergedAudio(audioName);
     MultipartFileSender.fromPath(Paths.get(mergedAudioPath)).with(request).with(response).serveResource();
   }

谢谢!

v09wglhw

v09wglhw1#

断开内容多部分的一种方法如下:

byte[] byteArray = null;

                        ByteArrayInputStream content = new ByteArrayInputStream(/*YOU BYTE[] RESPONSE*/);

                        MultipartStream multipartStream = new MultipartStream(content, ("MIME_boundary").getBytes(), null);

                        boolean nextPart;
                        try {
                            nextPart = multipartStream.skipPreamble();

                            while (nextPart) {
                                String header = multipartStream.readHeaders(); //HEADER MENSSAGE

                                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

                                multipartStream.readBodyData(byteArrayOutputStream); //Reads file within multipart

                                byteArray = byteArrayOutputStream.toByteArray();

                                nextPart = multipartStream.readBoundary();
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        retorno = Base64.getEncoder().encodeToString(byteArray);

                        return retorno;

相关问题