将较大的文件上载到Parse时可能出现OutOfMemoryException

时间:2014-08-08 01:13:36

标签: android parse-platform

我正在尝试使用Parse作为我的应用程序的可能后端,但在处理我想上传到它的大文件时我有一个问题。

文档中的

表示我需要将文件转换为byte array并将其传递到ParseFile,如此

byte[] data = "Working at Parse is great!".getBytes();
ParseFile file = new ParseFile("resume.txt", data);

但是大文件显然可以抛出OutOfMemoryException,因为将文件加载到字节数组会将整个文件加载到内存中。

所以我的问题是如何在避免获取OOME的同时将大文件上传到Parse?

3 个答案:

答案 0 :(得分:1)

如果用户完全控制上传过程,您的用户很可能最终会崩溃该应用,因为许多用户对文件大小不太了解。我注意到该解析有a nice wrapper class in their API for iOS (PFFile),限制为10 MB,很可惜他们没有为Android实现相同的功能。

我认为您将不得不使用他们的REST API手动执行此操作。看看他们的REST API,更具体地说是files endpoint。您可以轻松地将HttpURLConnectionFileInputStream结合使用,这使您可以更灵活地使用流上传过程。我通常更乐于手动操作,而不是使用不完全清楚幕后发生的事情的包装,但如果你不是,我可以发布一个简约的例子。

答案 1 :(得分:0)

一种可能的解决方案是读取大文件的部分内容并分别上传每个部分。您需要这样做,以便在重新下载文件时重新组合文件。

答案 2 :(得分:0)

没有理由不能使用REST API并使用普通的http 1.1标头对上传进行分块。

你应该读一下'chunked-encoding'并弄清楚如何将你的整个字节数据分割成android,如果真的那么大的话。

在android中,在发件人中,你必须对内容进行分段,明确管理两边都有流的io ...

输出流,您应该能够直接连接到http请求对象“OUT STREAM”。输入端只是读取输入文件的较小块,因此可以节省内存。

您设置了http连接

连接

获取http-connection-request的OUTSTREAM并将其传递给处理您的分块的streamCopy工具。

HTTP req标头:

> Transfer-Encoding: chunked
> Expect: 100-continue

来自解析的HTTP响应头应该看到......

表示“100继续”的东西,它等待连接到请求的输出流后面的分块过程发送更多数据。

使用http POST时,请记住关闭流/连接。

注意 - 如果你有大文件,你真的应该质疑你从大尺寸中得到的东西。所有类型的媒体文件都允许您在上传之前调整大小。