Spark 中的 InputStream 和文件上传 Java

InputStream and File Upload in Spark Java

我有一个使用 spark(不是 apache spark,而是 spark-java)编写的 java 应用程序。我只是想获得正在发布的流的句柄,但在我明确这样做之前不会从流中读取。但是,一旦我调用 getInputStream() ,此时似乎正在读取整个文件。难道只有当我尝试从输入流中读取时才会发生这种情况吗?如果我错了,任何人都可以提供有关如何做这样的事情的指导吗?

post("/encrypt", (req, res) -> {
        try {                
            req.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement("ProtectCS"));
            Part p = req.raw().getPart("uploaded_file");
            InputStream input = p.getInputStream();
        } catch (Exception e) {
            logger.error(e.getMessage());
            res.status(500);
            return e.getMessage();
        }
        res.status(201);
        return "Success";
});

谢谢

鉴于您的用例 - 第三方库可能读取大文件上传 - 我会绕过 Spark's/Jetty 的多部分支持并使用例如 Apache Commons FileUpload:

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload();

// Parse the *raw* request
FileItemIterator iter = upload.getItemIterator(request.raw());
while (iter.hasNext()) {
    FileItemStream item = iter.next();
    String name = item.getFieldName();
    InputStream stream = item.getInputStream();
    if (item.isFormField()) {
        System.out.println("Form field " + name + " with value "
            + Streams.asString(stream) + " detected.");
    } else {
        System.out.println("File field " + name + " with file name "
            + item.getName() + " detected.");
        // Process the input stream
        ...
    }
}

Commons FileUpload 文档将此称为 Streaming API,因此这可能就是您要查找的内容(以避免缓冲整个 InputStream 中的内容JVM 内存)。