使用 MIME 编码文件时出错

Posted

技术标签:

【中文标题】使用 MIME 编码文件时出错【英文标题】:Error encoding files with MIME 【发布时间】:2015-09-24 22:38:44 【问题描述】:

我已经创建了一个类来对 base64 文件进行编码和解码。这门课有效。我试图对 MIME 编码器和解码器做同样的事情,但它不起作用,我不知道为什么。

  public void encode64(File input, File output) throws IOException

    FileInputStream inputStream = new FileInputStream( input);
    FileOutputStream outputStream = new FileOutputStream( output);

    byte buff[] = new byte[300];
    int r = 0;

    while ( ( r = inputStream.read( buff)) > 0 ) 
      byte[] realBuff = Arrays.copyOf( buff, r );
      String b64 = Base64.getEncoder().encodeToString( realBuff);
      outputStream.write( b64.getBytes());
    

    inputStream.close();
    outputStream.close();



public void decode64(File input, File output) throws IOException

  FileInputStream inputStream = new FileInputStream( input);
  FileOutputStream outputStream = new FileOutputStream( output);

  byte buff[] = new byte[300];
  int r = 0;

  while ( ( r = inputStream.read( buff)) > 0 ) 
    byte[] realBuff = Arrays.copyOf( buff, r );
    outputStream.write( Base64.getDecoder().decode( realBuff));
  

  inputStream.close();
  outputStream.close();


我已经改变了 encode64 方法的行

String b64 = Base64.getEncoder().encodeToString( realBuff);

String b64 = Base64.getMimeEncoder().encodeToString( realBuff);

从 decode64 方法的行

outputStream.write( Base64.getDecoder().decode( realBuff));

outputStream.write( Base64.getMimeDecoder().decode( realBuff));

而我的课只适用于 txt 文件。

【问题讨论】:

它不起作用是什么意思?你有什么错误吗?还是只是输出与您期望的不同?那有什么区别呢? 顺便说一句。编码器的wrap(OutputStream os) 方法更适合您的代码。恕我直言。 抱歉没有很好地解释我的问题。当我运行我的 java 类时,我尝试对文件进行编码和解码并恢复相同的文件。我在 base64 中得到了这个目标,但是当我尝试使用 MIME 时,我无法打开解码文件。 【参考方案1】:

我会尝试使用编码器/解码器的wrap(...)方法,即

public void encode64(File input, File output) throws IOException 
    FileInputStream inputStream = new FileInputStream(input);
    FileOutputStream outputStream = new FileOutputStream(output);
    OutputStream encodedStream = Base64.getEncoder().wrap(outputStream);

    byte buff[] = new byte[300];
    int r = 0;
    while ((r = inputStream.read(buff)) > 0) 
      byte[] realBuff = Arrays.copyOf(buff, r);
      encodedStream.write(realBuff);
    

    inputStream.close();
    encodedStream.close();


public void decode64(File input, File output) throws IOException 
  FileInputStream inputStream = new FileInputStream(input);
  FileOutputStream outputStream = new FileOutputStream(output);
  OutputStream decodedStream = Base64.getDecoder().wrap(outputStream);

  byte buff[] = new byte[300];
  int r = 0;
  while ((r = inputStream.read(buff)) > 0) 
    byte[] realBuff = Arrays.copyOf(buff, r);
    decodedStream.write(realBuff);
  

  inputStream.close();
  decodedStream.close();

免责声明:写在我的脑海里,未经测试。

【讨论】:

【参考方案2】:

方法“Base64.getMimeEncoder().encodeToString(xxxx)”返回使用MIME类型base64编码方案编码的Encoder,而“Base64.getEncoder().encodeToString(xxxx)”使用基本类型base64编码方案。默认情况下,mime 是:text/plain。请参考网址:https://en.wikipedia.org/wiki/MIME 以供进一步参考

【讨论】:

以上是关于使用 MIME 编码文件时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 webpack 构建时 mime-db\db.json 出错

使用 perl 在 MIME 中解码附件时出错

在 python 脚本上附加 MIME 时出错

下载文件PHP时出错

在 mime_content_type() 中在 Wordpress 中上传图片时出错

包含扩展字符的 MIME 附件名称失败