Android-如何处理不完整的图像上传

时间:2011-11-29 03:01:29

标签: php android mysql http-post

在我正在处理的应用程序中,我们允许用户将图像上传到我们的服务器。我在asyncTask线程中执行此操作并使用httpMime并将图像作为字节数组发送到其中一个多部分实体字段中。我说大约80%的时间都很有用。图像显示在mySql表中的服务器上,因为longBlob没问题。由于网络状况的各种变化,或者在我测试过的功能较差的设备上(HTC dream / tmobile G1),内存将耗尽,另外20%的图像在上传时丢失。我通过添加一系列catch块来处理内存问题,这不再是一个问题。我曾尝试使用httpconnectionparams,但我不确定这是否会对问题产生很大影响。

然而.....现在我需要一些指导,以了解如何处理因网络问题而丢失的图像,例如延迟,从4g切换到边缘,以及其他问题,例如完全丢失覆盖。我正在考虑一个后台服务,该服务将检查来自服务器的任何返回的对象,如果该对象没有与之关联的图像,则对后台服务进行排队以重试上载。我主要担心的是,在测试过程中图像不能到达我的服务器,但偶尔在驾驶时或在塔台服务边缘的某个地方进行测试时,应用程序将只传输我在数据库中可以看到的部分图像。

所以.....这次我向社区提出的问题是你是如何处理这样一个问题的。我想要尝试的一种方法是将多部分传输中的文件的实际大小发送到服务器,如果图像遇到php我已经设置并且不匹配表示文件大小的int的大小然后发回响应中的标志值。然后根据应用程序返回的响应,它可能会再次触发asynctask重新上载照片。这种方法设置起来非常简单,但我想要一些更多的失败证明,而且如果用户一直没有覆盖,我会让这个僵尸进程咀嚼他们的电池......没有好处。

总是对意见,链接或其他帮助的问题提供任何帮助将非常感激:)

2 个答案:

答案 0 :(得分:0)

  1. 我真的怀疑你是用try / catch块处理内存不足的问题(除非你的意思是“句柄”:“它不会因为我们不让这些用户再上传大图像而崩溃”)。
  2. 您使用哪个库进行HTTP连接?我问这个是因为我最近在上传时遇到了OOM问题。
  3. 对于上传失败,我也有点困惑,你的服务器应该返回一个合适的响应,你的客户应该期待这个。除了(比如说)200之外的任何内容都应该导致Android UI让用户知道图片上传失败并且他应该再试一次。您的AsyncTask(希望您正在使用它)应该捕获这些异常并适当地处理它们。除非您的服务器出现其他问题,否则您不应该在“半上传”,连接丢失和类似情况下返回200秒。

答案 1 :(得分:-1)

好吧没有问题.....因为我没有得到任何好的回应指向我在任何方向我实施我自己的备份服务来检查服务器中的数据与手机上的数据。如果匹配没有问题,如果它的短,则询问用户是否想要重新上传。效果很好....感谢我欢呼哈哈!!!!