【问题标题】:Post base64 encoded video to server, OutOfMemoryError将 base64 编码的视频发布到服务器,OutOfMemoryError
【发布时间】:2014-12-06 16:59:43
【问题描述】:

我需要使用 base64 编码将较大的视频文件(和其他文件)发送到服务器。

我出现内存不足异常,因为我想将文件存储在内存中(在byte[] 中),然后使用Base64.encodeToString 将其编码为string。但是我怎样才能对文件进行编码并将其发送出去和/或使用更少的内存呢?或者我怎样才能做得更好?

对于我现在使用的请求MultipartEntityBuilder,在我构建它之后,我使用 post 方法将它发送到服务器,并且我还需要发送其他数据的文件。所以我需要同时发送一个请求,服务器只接受base64编码的文件。

因为我使用 Drupal 的 REST 模块从帖子中创建内容,如果我可以发送带有普通表单的普通帖子,这对我来说是另一种解决方案。 (就像浏览器一样)问题是,我找不到,只有一个解决方案。当您调用 <endpoint>/file url 并传递四件事时,它们是:

array("filesize" => 1029, // file size
      "filename" => "something.mp4", //file name
      "uid" => 1, // user id, who upload the file
      "file" => "base64 encoded file string")

在这个请求之后我得到一个fid,它是上传文件的id。创建节点时,我需要将其与真实内容一起发送。如果我可以像浏览器在表单发送时那样以正常的发布模式(无编码)发送文件,那就更好了。

【问题讨论】:

  • 如果您需要将图像(4-5MB)发送到服务器,我会给您解决方案。但我不熟悉视频到 base64 编码。
  • 不,我需要发送更大的东西

标签: java android encoding base64 androidhttpclient


【解决方案1】:

我需要使用 base64 编码将较大的视频文件(和其他文件)发送到服务器。

您应该考虑购买更好的服务器,支持二进制上传。

我遇到内存不足异常,因为我想将文件存储在内存中(在 byte[] 中),然后使用 Base64.encodeToString 将其编码为字符串。

这不适用于任何重要的视频。您没有用于此的堆空间。

但是如何对文件进行编码并通过无线方式发送出去和/或使用更少的内存?或者我怎样才能做得更好?

您可以实现到 base64 的流式转换器(从文件中读取字节并将字节写入 base64 编码文件,在该文件中,您一次只在 RAM 中处理少量字节)。然后,将该文件与您的其他表单数据一起上传。

【讨论】:

  • 我已经编辑了我的 q。我该如何实现呢?我觉得我需要为此编写一个新的编码器......
  • 你写的是真的,但我找到了更好的解决方案,在其余模块中,可以使用以下 url 以二进制形式发送这些文件:/file/create_raw
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
相关资源
最近更新 更多