Java 通过HTTPS上传Android附件

Java 通过HTTPS上传Android附件,java,android,http,file-upload,apache-commons,Java,Android,Http,File Upload,Apache Commons,我的应用程序如何要求用户选择一个文件,然后将该文件上载到服务器?该文件要么来自基于浏览器的下载,要么来自存储在其中的摄像头 我希望用户将使用任何文件浏览器来选择文件,以检查这两个东西写入的文件夹。然后我将存储文件的路径,并在发送电子邮件时进行上载 请告诉我如何选择文件,以及是否有办法使用HttpPost上传文件。(如果没有,我将编写单独的上传代码,但我仍然需要能够让用户选择文件。) 编辑:从中找到文件选择器代码。有一种内置的文件选择器,它使用ID而不是常规的文件系统。该应用程序已将其过滤为ima

我的应用程序如何要求用户选择一个文件,然后将该文件上载到服务器?该文件要么来自基于浏览器的下载,要么来自存储在其中的摄像头

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

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

编辑:从中找到文件选择器代码。有一种内置的文件选择器,它使用ID而不是常规的文件系统。该应用程序已将其过滤为image/*类型,但如果您删除该过滤器,它将询问是否应使用gallery(它具有指向摄像头的菜单链接),或者是否应使用声音文件或录制新的声音文件。起始位置是
src/com/android/email/activity/MessageCompose.java
。该方法是
onOptionsItemSelected
,它有一个
开关
大小写:
用于附件

编辑:解决方案
事实证明,Android SDK只包含apache库的一部分,因此HttpClient不存在。我将使用多个请求获取要上载的数据,并将Base64数据放入其中一个POST参数中。

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

org.apache.commons.httpclient.HttpClient
关于如何在Java中实现这一点,有很多例子。但是,请确保您查看的任何示例都使用较新的4.x版本的
HttpClient
,而不是较旧的3.x版本

但在文件选择部分不确定

  • android上没有专用的文件选择器,因此您必须创建自己的:

  • 当您说需要上传到服务器时,您没有指定协议,所以我假设您指的是经典的Http文件上传(使用多部分mime发布)。例子取自

  • 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);
    }