gpt4 book ai didi

java - 传入多部分请求的快速 "preview"

转载 作者:行者123 更新时间:2023-11-28 22:16:17 26 4
gpt4 key购买 nike

我正在尝试实现一个 REST 服务(或者甚至是单个 Servlet),它允许我快速“预览”传入文件(包含单个文件的多部分请求)。

这个想法是在数据库中解析并存储进入服务的潜在巨大文件的前几行。

我面临的问题是 Spring @RestController(在 Tomcat 上)在服务器接收到整个请求并且 MultipartFile 已经存储在文件系统上之后运行。

我设法实现了一些与纯 Servlet 实现一起工作的东西(直接从 HttpServletRequest 读取多部分请求)但是......然后我需要手动完成所有多部分解析工作。我尝试使用 commons fileupload ( http://commons.apache.org/proper/commons-fileupload/ ) 但它还在文件系统上缓存文件,所以当我调用时:

        List<FileItem> uploads = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);

所有卡住 util 整个文件上传到服务器。

有关如何处理此问题的任何建议 - 最好是在 Tomcat 上,并在可能的情况下使用@RestController。

最佳答案

我相信您对 commons-fileupload 的理解是正确的。您只需要使用 "streaming" API .类似的东西应该可以工作:

@RestController
public class ARestController {
@RequestMapping(value = Routes.A_ROUTE, method = RequestMethod.POST)
public ResponseEntity<?> processMultiPart(HttpServletRequest request) {
try {
ServletFileUpload upload = new ServletFileUpload();
final FileItemIterator itemIterator = upload.getItemIterator(request);

while (itemIterator.hasNext()) {
final FileItemStream fileItemStream = itemIterator.next();
if (!fileItemStream.isFormField()) {
try (InputStream inputStream = fileItemStream.openStream()) {
// process the stream the way you want
}
}
}
} catch (Exception e) {
// ...
}
}
}

通过这种方式,您可以将部分作为流读取,使用您需要的任何内容,并丢弃其余部分。 FS 上不会存储任何内容。

关于java - 传入多部分请求的快速 "preview",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49025273/

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