gpt4 book ai didi

java - 通过 JSP 上传文件时如何从 Servlet 中的流创建 block

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:09 26 4
gpt4 key购买 nike

我必须上传文件,并且必须将该文件作为 block 写入云存储中。

  • 下面是JSP中上传文件的代码:

    <form action="/myservlet" method="post" enctype="multipart/form-data">
    <input type="file" name="file" title="File"/>
    <input type="submit" value="Submit"/>
    </form>
  • Servlet中获取上传文件的流如下:

     ServletFileUpload upload = new ServletFileUpload();
    FileItemIterator iter = upload.getItemIterator(request);
    FileItemStream imageItem = iter.next();
    InputStream inputStream = imageItem.openStream();

我必须在 servlet 中创建小块,并且必须将它们直接上传到云存储。由于我的应用程序在 AppEngine 中运行,因此我无法访问本地文件存储。

有没有办法在读取时从上述输入流创建 block ?

最佳答案

从流中读取所需长度的 block 。继续阅读,直到没有更多可用字节:

static final int CHUNK_LENGTH = 1000000;
void readChunks(InputStream input) throws IOException {

byte chunk[] = new byte[CHUNK_LENGTH];

int length;
do {
length = IOUtils.read(input, chunk);
if (length>0) {
//if the total length is multiple of CHUNK_LENGTH
//the last chunk will be empty
doSomethingWith(chunk, length);
}
} while (length==CHUNK_LENGTH);
}

这里IOUtils.read是来自commons-io的实用函数,读取尽可能多的字节并返回实际读取的长度(如果达到 EOF,则可能小于请求的长度)

   int read(final InputStream input, final byte[] buffer) throws IOException {
int length = buffer.length;
int remaining = length;
while (remaining > 0) {
final int location = length - remaining;
final int count = input.read(buffer, location, remaining);
if (EOF == count) { // EOF
break;
}
remaining -= count;
}
return length - remaining;
}

关于java - 通过 JSP 上传文件时如何从 Servlet 中的流创建 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45533222/

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