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

Php Android-如何处理不完整的图像上传,php,android,mysql,http-post,Php,Android,Mysql,Http Post,在即时通讯正在开发的应用程序中,我们允许用户将图像上传到我们的服务器。我在asyncTask线程中执行此操作,使用HttpTime并在其中一个多部分实体字段中以字节数组的形式发送图像。我想大概有80%的时间这个效果很好。这些图像在服务器上的mySql表中显示为longBlob没有问题。另外20%的图像在上传时丢失,原因是网络状况发生了各种变化,或者在我测试过的功能较差的旧设备(HTC dream/tmobile G1)上,内存会耗尽。我通过添加一系列catch块来解决内存问题,这样就不再是问题了

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

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

所以……我这次向社区提出的问题是,你是如何处理这样一个问题的。我考虑尝试的一种方法是在多部分传输中将文件的实际大小发送到服务器,如果图像到达我设置的php,并且与表示文件大小的int的大小不匹配,则在响应中发回一个标志值。然后根据应用程序返回的响应,它可能会再次启动异步任务以重新加载照片。这种方法设置起来非常简单,但我希望有一种更能防止故障的方法,此外,如果用户长时间没有覆盖,我会让这个僵尸进程吃掉他们的电池……这不好

和往常一样,如果您能在这件事上提供意见、链接或其他帮助,我们将不胜感激:)

  • 我真的怀疑你仅仅用try/catch块就能处理内存不足的问题(除非你说的“handle”是指:“它不会崩溃,因为我们不再让这些用户上传大图片了”)
  • 您使用哪个库进行HTTP连接?我问这个问题是因为我最近在上传时也遇到了OOM问题
  • 对于您的上传失败,我也有点困惑,您的服务器应该会返回一个适当的响应,而您的客户机应该会期待这个。除了200以外的任何东西都会导致Android用户界面让用户知道图像上传失败,他应该再试一次。您的AsyncTask(希望您使用的是AsyncTask)应该捕获这些异常并适当地处理它们。除非您的服务器出现其他问题,否则您不应该在“半上传”、断开连接和类似情况下返回200秒

  • 好的,没问题……因为我没有得到任何好的回复,所以我实施了自己的备份服务,将服务器中的数据与手机上的数据进行对比。如果匹配,则询问用户是否要重新上传。太棒了…多亏了我万岁哈哈

    哈哈,是的,我只用一个try/catch块就神奇地处理了我的内存不足问题……伙计……我相信我可能知道我在做什么哈哈……我所做的就是捕捉内存异常,直到我没有在较小的设备上进行任何测试。所以我的try-catch是这样的…..尝试{my.process();}catch(OOME){my.process2()}等等…..我使用的库是httpmime-4.1.1,它工作得非常好。服务器确实发回了一个响应,我现在在日志中捕捉到了这个响应。但问题是……我现在的设置没有检查半上传。如果你能给我一两个指针,说明我应该如何处理半上传或失败的响应,我将非常感激:)嗯……我也使用了httpime,没有遇到内存问题。我实际上用它来解决我在另一个图书馆遇到的问题。我仍然不明白为什么你需要一个额外的服务来知道你的上传是否成功,但如果它对你有效,那就太好了。我必须创造一些东西,这样我才能绝对肯定这些图片不仅传到了服务器上,而且还成了一个完整的部分,这是我的问题。内存问题主要是由于进出手机的图像数量过大,而不是由于使用了httpime库。但是,是的,我的服务很棒……每个人都这么告诉我;)