gpt4 book ai didi

java - Spring 中的多部分文件下载?

转载 作者:行者123 更新时间:2023-12-05 07:47:50 26 4
gpt4 key购买 nike

我正在开发一个应用程序来从我的服务器进行一些 mp3 流式传输。我希望用户不要下载整个 mp3 文件,因此字节部分写入响应的 OutputStream。

我知道这也与 HTTP header 和范围有关,所以我找到了 this class那应该工作。

但是,我使用的是 Spring MVC Controller ,它似乎没有按预期工作:文件已完全下载,并且在一个用户请求中有两个请求 Controller ,但有以下异常:

 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();
}

谢谢!

最佳答案

打破内容多部分的一种方法如下:

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;

关于java - Spring 中的多部分文件下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39163784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com