0

我在 GAE 上有一个处理表单的 httpservlet。表单有一个按钮。在 servlet 中,我使用 apache.commons.fileupload 来处理单个文件上传,但我不知道如何处理多个文件数组......任何帮助表示赞赏。

形式:

<form id="fileupload" action="/Save" method="Post" enctype="multipart/form-data">
    <input name="title" type=text />
    <textarea name="info"></textarea>
    <input type="file" name="files[]" multiple>
    <input id="save" type="submit" value="Save this">
</form>

小服务程序:

FileItemIterator iter = upload.getItemIterator(req);
while (iter.hasNext()) {
    FileItemStream item = iter.next();
    String name = item.getFieldName();
    InputStream stream = item.openStream();
    if (item.isFormField()) {
        System.out.println("Form field " + name + " with value "
            + Streams.asString(stream) + " detected.");
    } else {
        // name here will be "files[]"
        System.out.println("File field " + name + " with file name "
        + item.getName() + " detected."); 
        //MY NONWORKING ATTEMPT AT HANDLING THE FILES[] ARRAY: <- this is my question, how to do this?
        Object files[] = Streams.copy(stream);
        for(int i = 0; i < files.size(); i++){
            String fileType = files[i].getContentType();
            Blob imageBlob = new Blob(Files[i]);
        }
    }
}
4

1 回答 1

0

您正在尝试从 one 获取所有文件FileItemStream,而实际上每个FileItemStream文件都是它自己的文件。

// INSERT THIS INSTEAD OF YOUR NONWORKING PART
String filename = item.getName();
String contentType = item.getContentType();
int len;
byte[] buffer = new byte[8192];
while ((len = stream.read(buffer, 0, buffer.length)) != -1) 
    // here save the buffer to blobstore
}

要将数据保存到 blobstore,请参阅如何使用新的 Files API 保存到 blobstore

于 2012-12-12T09:38:25.587 回答