2

ファイルのアップロードに Apache Commons FileUpload ライブラリを使用しています。InputStream の内容を 1 バイト配列にコピーしたいと考えています。どうすればそれができますか?

try {
    List<FileItem> items = new ServletFileUpload(
            new DiskFileItemFactory()).parseRequest(request);
    for (FileItem item : items) {
        if (item.isFormField()) {
            // Process regular form field (input
            // type="text|radio|checkbox|etc", select, etc).
            String fieldname = item.getFieldName();
            String fieldvalue = item.getString();
            out.println("returned");
        } else {
            // Process form file field (input type="file").
            String fieldname = item.getFieldName();
            String filename = FilenameUtils.getName(item.getName());
            InputStream input = item.getInputStream();
            if (fieldname.equals("file")) {
                // please help me here.
                byte[] allbyte = ???
            }
        }
    }
}
4

3 に答える 3

2

Apache commons-ioライブラリのIOUtils.toByteArray()utility メソッドを使用します。

import org.apache.commons.io.IOUtils;

InputStream input;
byte[] bytes = IOUtils.toByteArray(input);

それはあなたにワンライナーを与えます。一般に、必要なことを実行する既存のライブラリを見つけるようにしてください。Apache コモンズ ライブラリには便利なメソッドがたくさんあります。

于 2012-06-28T02:36:05.430 に答える
0

を使用するのはByteArrayOutputStreamどうですか?

ByteArrayOutputStream out = new ByteArrayOutputStream();

int b = input.read();
while (b != -1) {
    out.write(b);
    b = input.read();
}
allbyte = out.toByteArray();
于 2012-06-28T00:38:57.177 に答える
-1

DataInputStream を使用します。すべてのバイトを読み取る readFully() メソッドがあります。

DataInputStream dis = new DataInputStream(inputStream);
byte[] allBytes = new byte[inputStream.available()];
dis.readFully(allBytes);

詳細については、

入力ストリーム

データ入力ストリーム

于 2012-06-28T01:01:08.403 に答える