【问题标题】:Store base64 encoded string as file将 base64 编码的字符串存储为文件
【发布时间】:2011-09-10 05:57:02
【问题描述】:

我有一个 Web 服务,它返回 PDF 文件的 base64 编码字符串。

我想将此文件保存到 SD 卡。但是当我尝试这样做时,adobe reader 告诉我文件已损坏。显然我没有正确保存它。

byte[] pdfAsBytes = Base64.decode(resultsRequestSOAP.toString(), 0);

File filePath = new File(Environment.getExternalStorageDirectory()+"/braodcasts.pdf");
FileOutputStream os = new FileOutputStream(filePath, true);
os.write(pdfAsBytes);
os.close();

resultsRequestSOAP.toString() 看起来像这样:

JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlbi1JRSkgPj4NCmVuZG9iag0KMiAwIG9iag0KPDwvVHlwZS9QYWdlcy9Db3VudCAxL0tpZHNbIDMgMCBSXSA+Pg0KZW5kb2JqDQozIDAgb2JqDQo8PC9UeXBlL1BhZ2UvUGFyZW50IDIgMCBSL1Jlc291cmNlczw8L0ZvbnQ8PC9GMSA1IDAgUj4+L0V4dEdTdGF0ZTw8L0dTNyA3IDAgUi9HUzggOCAwIFI+Pi9YT2JqZWN0PDwvSW1hZ2U5IDkgMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0ltYWdlQy9JbWFnZUldID4+L01lZGlhQm94WyAwIDAgNTk1LjMyIDQxOS41Ml0gL0NvbnRlbnRzIDQgMCBSL0dyb3VwPDwvVHlwZS9Hcm91cC9TL1RyYW5zcGFyZW5jeS9DUy9EZXZpY2VSR0I+Pi9UYWJzL1M+Pg0KZW5kb2JqDQo0IDAgb2JqDQo8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDE0ND4+DQpzdHJlYW0NCnicLY29CgIxEIT7hX2HKVVw3ewluUsr/qCdGLAQC5HzqlPU9wdjcKaaYZhvmZkWGwfnRD3ynclBix18l6T0TRJ1yGOZbY8thg+TYqip+6ct03mC6QV5z7Quhy+muYpWWWjhLEqKCClIYzBTCRHvnuk0w4PJuyi+Uk07MbRWsWV6+2F343XoE1ZPHJi+nDkiaw0KZW5kc3RyZWFtDQplbmRvYmoNCjUgMCBvYmoNCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL05hbWUvRjEvQmFzZUZvbnQvQUJDREVFK0NhbGlicmkvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL0ZvbnREZXNjcmlwdG9yIDYgMCBSL0ZpcnN0Q2hhciAzMi9MYXN0Q2hhc

这只是一个sn-p!

谢谢

【问题讨论】:

  • 看起来您正在打开它以进行附加。是否已经有一个具有您要附加的名称的文件?
  • 我没有打开它进行追加,我每次都覆盖文件
  • 在文本编辑器中查看 PDF。第一行应该是“%PDF-1.4”,最后一行应该是“%%EOF”。
  • 是的,我只是没有在写入后刷新文件。感谢您的帮助:)
  • 我刚刚注意到所有 pdf 文件都以 JVBERi0xLj 开头。而且我只使用第一部分来检查我的 pdf 是否更改...

标签: android pdf base64 ksoap


【解决方案1】:

也许您可以在关闭 FileOutputStream 之前对其进行刷新。

os.write(pdfAsBytes);
os.flush();
os.close();

【讨论】:

  • 这让我很吃惊。我原以为 close 会自动刷新所有未写入的字节。
  • FileOutputStream 中的flush() 方法什么都不做,它继承自OutputStream。正如文档所说Flushes this stream. Implementations of this method should ensure that any buffered data is written out. This implementation does nothing.
  • 我认为它会清除流中可能存在的任何剩余字节,这就解释了为什么它解决了我的问题。
猜你喜欢
  • 2016-01-11
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 2017-01-28
  • 2021-01-23
  • 1970-01-01
相关资源
最近更新 更多