Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在通过JSP上传文件时从Servlet中的流创建块_Java_Google App Engine_Apache Commons Fileupload - Fatal编程技术网

Java 如何在通过JSP上传文件时从Servlet中的流创建块

Java 如何在通过JSP上传文件时从Servlet中的流创建块,java,google-app-engine,apache-commons-fileupload,Java,Google App Engine,Apache Commons Fileupload,我必须上传文件,并将该文件作为块写入云存储 以下是JSP中的上载文件代码: <form action="/myservlet" method="post" enctype="multipart/form-data"> <input type="file" name="file" title="File"/> <input type="submit" value="Submit"/> </form> 我必须在servlet中创

我必须上传文件,并将该文件作为块写入云存储

  • 以下是JSP中的上载文件代码:

    <form action="/myservlet" method="post" enctype="multipart/form-data">
        <input type="file" name="file" title="File"/>
        <input type="submit" value="Submit"/>
    </form>
    
我必须在servlet中创建小块,并将它们直接上传到云存储。在这里,我无法访问本地文件存储,因为我的应用程序正在AppEngine中运行


在读取时,是否有方法从上述inputstream创建块?

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

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
是一个来自的实用函数,它读取尽可能多的字节并返回实际读取的长度(如果达到EOF,则可能小于请求的长度)


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

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
是一个来自的实用函数,它读取尽可能多的字节并返回实际读取的长度(如果达到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;
    }