我有一个带有字段的html表单,该字段将指向一个(可能是二进制)文件(例如图像)的URL。 url可以指向服务器无法访问的本地资源,因此需要客户端提取。 (这个提取是另一个问题,我的问题是关于编写servlet。)
我想将此fetch的结果上传到Java servlet(通过http POST请求)并将其放入一个字节数组中。由于这是一个低级表示,我不确定是否应该使用Apache的FileUpload。
让我感到困惑的另一点是,FileUpload中的FileItem
仅提供OutputStream
,我希望InputStream
能够读取该文件。
我在学习FileUpload后陷入困境。我可能认为我对网络应用程序开发的基本知识不足。
我应该如何构建此功能?请注意,我是Java开发的这个角落的新手(虽然我的一般(即SE)Java技能非常好。)
答案 0 :(得分:1)
继续使用FileUpload,不要自己重新发明它。这将是浪费时间。
我不确定为什么您认为FileItem
仅提供OutputStream
,还有getInputStream()
方法。只需将其写入ByteArrayOutputStream
。
InputStream input = fileItem.getInputStream();
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(input, output);
byte[] bytes = output.toByteArray();
// ...
您只需要记住,如果有很多用户同时上传文件,这可能会破坏服务器的内存使用量。字节数组的每个字节都占用JVM内存的一个字节。因此,假设您有100个同时上传每个10MB文件的用户,那么就浪费了1GB的服务器内存。
答案 1 :(得分:0)
如果我理解正确,你只是想在servlet中接收通过HTTP上传的文件?有很多关于如何在网上做到这一点的例子,例如http://www.servlets.com/jservlet2/examples/ch04/UploadTest.java
我在你的问题中遗漏了什么?