0

我有一个任务,我需要创建一个 .xlsx 并将其转换为 base64,此文件将作为附件在电子邮件网络服务中发送。将 .xlsx 转换为 base64 的代码如下:

import java.io.*;

import org.apache.commons.codec.binary.Base64;

public class Test {
  public static void main(String [] args) {

     String fileName = "C:/Users/kk.txt";

    try {
          byte[] buffer = new byte[1000];

        FileInputStream inputStream = 
            new FileInputStream(fileName);

        int total = 0;
        int nRead = 0;
        String reference=null;
        while((nRead = inputStream.read(buffer)) != -1) {
                           String name=(new String(buffer));
            byte[] encodedBytes = Base64.encodeBase64(name.getBytes());

            System.out.println(new String(encodedBytes));

        }   

      inputStream.close();      

      System.out.println("Read " + total + " bytes"); 
    }
    catch(FileNotFoundException ex) {
        System.out.println(
            "Unable to open file '" + 
            fileName + "'");                
    }
    catch(IOException ex) {
        System.out.println(
            "Error reading file '" 
            + fileName + "'");                  
        // Or we could just do this: 
        // ex.printStackTrace();
    }
  }
}

但是当我使用 BPEL 将它作为邮件发送并且当我打开文件时它显示一般输入/输出错误。但是当我将它作为文本发送时它工作正常。我应该不将此代码用于 excel 还是我错了。我对 java 完全陌生。

4

3 回答 3

3

好的 - 我的猜测是您没有更改您为附件创建的电子邮件的 mimetype 等功能(默认为 text/html )。

看一下这里- 这是一个单词文档 - 但概述了我认为你应该做的事情(假设我找到了正确的 BPEL 类型)

对于您的文件类型“.xlsx”,此表显示了适当的 mime-type 就像

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
于 2013-08-13T07:06:49.680 回答
1
package com.denemeler;

import java.io.*;
import java.util.Base64;

public class test {

    public static void main(String[] args) throws IOException {

        String filePath = "D:\\test.xls";
        File file = new File(filePath);
        FileInputStream fis = new FileInputStream(file);
        byte[] bytes = new byte[(int) file.length()];
        fis.read(bytes);
        String base64 = new sun.misc.BASE64Encoder().encode(bytes);

        String destinationPath = "D:\\Destination\\donusmusHali.xls";

        //decode Base64 String to image
        FileOutputStream fos = new FileOutputStream(destinationPath); 
        bytes = new sun.misc.BASE64Decoder().decodeBuffer(base64);
        fos.write(bytes);


        fis.close();
        fos.close();
    }

}

此代码适用于编码和解码 excel 文件。

于 2017-09-06T13:59:31.213 回答
0

通常,我们在 outputStream 中使用 filename.xls 来编写我们的 Excel 工作簿。但是如果需要以 base64 格式通过网络发送它,那么 ByteArrayOutputStream 是一个选择:

Workbook workbook = new HSSFWorkbook();
ByteArrayOutputStream b = new ByteArrayOutputStream();
try {
    workbook.write(b);
}catch(FileNotFoundException e){
  e.printStackTrace();
}catch(Exception e){
  e.printStackTrace();
}
byte[] bytes = bos.toByteArray(
);
Base64.encodeBase64String(bytes);

这个解决方案对我有用,因为第一个 excel 是使用 Apache POI 创建的,然后应用上面的代码并将其转换为 base64,当通过网络解码时,编码文件会按预期在 excel 应用程序中打开。:)

您可以在https://nupur28ag.blogspot.com/2020/01/get-base64-from-excel-created-using.html上进行相同操作

于 2020-01-28T12:57:30.943 回答