Обрабатывать двоичный файл в Java с помощью FileItemStream - PullRequest
1 голос
/ 21 февраля 2012

У меня есть веб-приложение, которое позволяет загружать двоичные файлы.Я должен разобрать их и сохранить содержимое 1: 1 в строку, а затем в базу данных.

Когда я использую uuencode на Unix-машине для кодирования двоичного файла, тогда он работает.Есть ли способ сделать это автоматически в Java?

if (isMultipart) {

            //Create a new file upload handler
            ServletFileUpload upload = new ServletFileUpload();

            //Parse the request
            FileItemIterator iter = upload.getItemIterator(request);

            while (iter.hasNext()) {
                FileItemStream item = iter.next();
                String name = item.getFieldName();

                InputStream stream = item.openStream();

                if (!item.isFormField()) {

                    BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
                    String line;
                    licenseString = "";

                    while ((line = reader.readLine()) != null) {
                        System.out.println(line);

                        // Generate License File
                        licenseString += line + "\n";
                    }
                }
            }
            session.setAttribute("licenseFile", licenseString);
            System.out.println("adding licensestring to session. ");
        }

Это работает, конечно, для всех загруженных недвоичных файлов.Как я могу расширить его для поддержки бинарных файлов?

Ответы [ 3 ]

3 голосов
/ 13 марта 2012
// save to file
// =======================================
InputStream is = new BufferedInputStream(item.openStream());
BufferedOutputStream output = null;

try {
    output = new BufferedOutputStream(new FileOutputStream("temp.txt", false));
    int data = -1;
    while ((data = is.read()) != -1) {
        output.write(data);
    }
} finally {
    is.close();
    output.close();
}

// read content of file
// =======================================
System.out.println("content of file:");
try {
    FileInputStream fstream = new FileInputStream("temp.txt");

    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String line;

    licenseString = "";
    String strLine;
    while ((strLine = br.readLine()) != null)   {
          System.out.println(javax.xml.bind.DatatypeConverter.printBase64Binary(strLine.getBytes()));
          licenseString += javax.xml.bind.DatatypeConverter.printBase64Binary(strLine.getBytes()) + "\n";
    }                                           
} catch (Exception e) {
    System.err.println("Error: " + e.getMessage());
}
1 голос
/ 21 февраля 2012

Вы можете использовать библиотеку commons_fileupload (проверьте это здесь: org.apache.commons.fileupload.disk.DiskFileItem не создан должным образом? )

Документ находится здесь: http://commons.apache.org/fileupload/using.html Ваш случай довольно хорошо объяснен на официальном сайте.

0 голосов
/ 21 февраля 2012

Лучшим способом было бы написать загрузку во временный файл и затем обработать его оттуда:

if (!item.isFormField()) {

    InputStream stream = new BufferedInputStream(item.getInputStream());
    BufferedOutputStream output = null;

    try {
        output = new BufferedOutputStream(new FileOutputStream(your_temp_file, false));
        int data = -1;
        while ((data = input.read()) != -1) {
            output.write(data);
        }
    } finally {
        input.close();
        output.close();
    }
}

теперь у вас есть временный файл, который совпадает с загруженным файлом, вы можетеоттуда делайте свои «другие» расчеты.

...