通过HTTPS上传Android附件

时间:2011-01-13 20:19:10

标签: java android http file-upload apache-commons

我的应用程序如何要求用户选择文件然后将该文件上传到服务器?该文件将来自基于浏览器的下载,或者来自存储它的相机。

我希望用户将使用任何文件浏览器选择文件,检查这两个东西写入的文件夹。然后,我将存储文件的路径,并在发送电子邮件时进行上传。

请告诉我如何选择文件,以及是否有办法使用HttpPost上传文件。 (如果没有,我会写单独的上传代码,但我仍然需要让用户选择该文件。)

编辑:找到Android Email App Source Code中的文件选择器代码。有一种内置文件选择器使用ID而不是常规文件系统。应用程序已将其过滤为图像/ *类型,但如果您删除该过滤器,它将询问是否应使用图库(具有相机的菜单链接)或者是否应使用声音文件或录制新的声音文件。起点是src/com/android/email/activity/MessageCompose.java。该方法为onOptionsItemSelected,附件有switch case:

编辑:解决方案

事实证明,Android SDK仅包含部分apache库,因此HttpClient不存在。我将使用多个请求上传数据,并在其中一个POST参数中输入Base64数据。

2 个答案:

答案 0 :(得分:2)

  1. Android上没有专门的文件选择器,因此您必须创建自己的文件选择器:How to create file chooser in Android?

  2. 当你说你需要上传到服务器时,你没有指定协议,所以我假设你的意思是经典的Http文件上传(带有多部分mime的POST)。示例来自here

    try {
        DefaultHttpClient httpclient = new DefaultHttpClient();
        File f = new File(filename);
    
        HttpPost httpost = new HttpPost("http://myremotehost:8080/upload/upload");
        MultipartEntity entity = new MultipartEntity();
        entity.addPart("myIdentifier", new StringBody("somevalue"));
        entity.addPart("myFile", new FileBody(f));
        httpost.setEntity(entity);
    
        HttpResponse response;
    
        response = httpclient.execute(httpost);
    
        Log.d("httpPost", "Login form get: " + response.getStatusLine());
    
        if (entity != null) {
            entity.consumeContent();
        }
        success = true;
    } catch (Exception ex) {
        Log.d("FormReviewer", "Upload failed: " + ex.getMessage() +
            " Stacktrace: " + ex.getStackTrace());
        success = false;
    } finally {
         mDebugHandler.post(mFinishUpload);
    } 
    

答案 1 :(得分:0)

是的,您可以使用HttpPost执行文件上传。以下是使用以下几个示例:

org.apache.commons.httpclient.HttpClient

有很多关于如何在Java中执行此操作的示例。但请确保您查看的任何示例都使用HttpClient的较新4.x版本,而不是较旧的3.x版本。

虽然不确定文件选择部分。