java - 使用 FileItemStream 在 Java 中处理二进制文件

标签 java file-upload upload binary encode

我有一个允许上传二进制文件的网络应用程序。我必须解析它们并将内容 1:1 保存到一个字符串中,然后再保存到数据库中。

当我在 unix 机器上使用 uuencode 对二进制文件进行编码时,它就可以工作了。有没有办法在 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. ");
        }

它当然适用于所有上传的非二进制文件。我如何扩展它以支持二进制文件?

最佳答案

// 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());
}

关于java - 使用 FileItemStream 在 Java 中处理二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9375697/

相关文章:

java - 生成随机数,但必须使用不重复的唯一数字生成

c# - 在 asp.net mvc 4 razor 中上传文件

ssl - upload.yaws 因 erlang R16B-03.7.el7 和 yaws 1.98-2.el7 而失败

php - 发布提交表单后保留上传的文件

powershell - 使用响应流使用 Powershell 上传文件

java - 运行 Teamprise-ant 任务时 PKIX 路径构建失败

java - 无法在 spring 中填充 modelAttribute

java - 使用自定义 Swing 组件进行文本换行的 JOptionPane

c# - 从上传的文件中读取字符串

linux - nginx 的 upload_progress 模块不起作用