将base64编码的视频发布到服务器,OutOfMemoryError

时间:2014-12-06 16:59:44

标签: java android encoding base64 androidhttpclient

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

我出现内存异常,因为我想将文件存储在内存中(在byte[]中),然后使用string将其编码为Base64.encodeToString。但是如何编码文件并在空中发送和/或使用更少的内存?或者我怎样才能更好地做到这一点?

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

OR

因为我使用Drupal的REST模块从帖子创建内容,所以如果我可以使用普通表单发送普通帖子,那么这是我的另一个解决方案。 (就像浏览器一样)问题是,我无法找到,只有一个解决方案。当你拨打<endpoint>/file网址并传递四件事时,这些是:

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。当我创建节点时,我需要用真实内容发送它。如果我可以像浏览器在表格发送时那样以正常的帖子模式(没有编码)发送文件,那就更好了。

1 个答案:

答案 0 :(得分:1)

  

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

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

  

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

这对任何重要视频都无效。你没有堆空间。

  

但是如何编码文件并在空中发送和/或使用更少的内存?或者我怎样才能更好地做到这一点?

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