我需要使用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。当我创建节点时,我需要用真实内容发送它。如果我可以像浏览器在表格发送时那样以正常的帖子模式(没有编码)发送文件,那就更好了。
答案 0 :(得分:1)
我需要使用base64编码将更大的视频文件(和其他文件)发送到服务器。
您应该考虑购买一台更好的服务器,一台支持二进制上传的服务器。
我出于内存异常,因为我想将文件存储在内存中(在byte []中),然后使用Base64.encodeToString将其编码为字符串。
这对任何重要视频都无效。你没有堆空间。
但是如何编码文件并在空中发送和/或使用更少的内存?或者我怎样才能更好地做到这一点?
您可以将流式转换器实现为base64(从文件读取字节并将字节写入base64编码的文件,在RAM中一次只处理少量字节)。然后,将文件与其余表单数据一起上传。