2011-08-23 28 views
0

我一直在研究这个主题一段时间,我无处可去。我购买的书籍以及我找到的每个示例/博客都解释了如何使用HttpClient,HttpPost和MultipartEntity对象上传文件。每当我使用这种方法时,发生以下几种情况中的一种:从Android手机上传图像到我的服务器的最简单方法是什么

  1. 我的应用程序会崩溃。 Android告诉我应用程序意外停止,我必须强制关闭它。

  2. 如果我使用的代码包含MultipartEntity,但不包含图像文件(使用addPart()),则POST数据将被我的PHP服务器接收。

我需要一个简单而直接的方法来完成这个过程。我甚至尝试过使用FTP,我会尝试使用我拥有的FTPClient示例代码,但到目前为止,我无处可去,通常上传文件是一项非常简单的任务。

如果有谁可以帮助我,请给我回复。这个项目最难的部分是理解正确的程序,因为我发现几乎每种来源的代码都来自我在线看到的。看起来这个主题没有标准,这是非常令人沮丧的。

+1

对于上面提到的情况1,您是否正在主线程上进行联网?应用程序崩溃时是否有堆栈跟踪?图像的大小是多少? –

回答

0

你似乎已经拥有几乎所有的武器了;你是否从新线程发送POST请求?我猜你不是,那就是强制关闭的原因(即挂在应用程序的主线程上)。

如果不是这样,你能显示一些代码吗?

1

我在我的几个Android项目中使用了这块代码,并没有引起任何问题。您可以根据需要修改它。它使用HttpMime-4.1.1,它是HttpCore的一部分。希望这会为你工作,以及

/*** 
    * Execute multi part request especially for thing related to byte[] 
    * @param url The destination URL 
    * @param byteArray The byte to upload 
    * @param values Additional key/value pair that you want to add 
    * @param fileImage The image file name 
    * @param imageFileKey The form key for the bytes that you are uploading 
    * @return 
    * @throws Exception 
    */ 
    public static HttpResponse executeMultipartPost(String url, byte[] byteArray, 
      HashMap<String, StringBody> values, 
      String fileImage, String imageFileKey)throws Exception { 
     HttpPost postRequest = new HttpPost(url); 
     HttpClient httpClient = new DefaultHttpClient(); 

     Set<Map.Entry<String, StringBody>> entries = values.entrySet(); 
     MultipartEntity multipartContent = new MultipartEntity(); 

     for(Map.Entry<String, StringBody> current : entries) { 
      multipartContent.addPart(current.getKey(), current.getValue()); 
     } 

     InputStreamBody isb = new InputStreamBody(new ByteArrayInputStream(byteArray), 
       "image/jpeg", fileImage); 
     multipartContent.addPart(imageFileKey, isb); 

     postRequest.setEntity(multipartContent); 
     HttpResponse res = httpClient.execute(postRequest); 
     return res; 
    } 

1

确保您在XML文件中设置您的权限。通常打开套接字并发送数据要求您对应用程序设置更高级别的权限,而不仅仅是默认的

相关问题