我的应用程序如何要求用户选择文件然后将该文件上传到服务器?该文件将来自基于浏览器的下载,或者来自存储它的相机。
我希望用户将使用任何文件浏览器选择文件,检查这两个东西写入的文件夹。然后,我将存储文件的路径,并在发送电子邮件时进行上传。
请告诉我如何选择文件,以及是否有办法使用HttpPost
上传文件。 (如果没有,我会写单独的上传代码,但我仍然需要让用户选择该文件。)
编辑:找到Android Email App Source Code中的文件选择器代码。有一种内置文件选择器使用ID而不是常规文件系统。应用程序已将其过滤为图像/ *类型,但如果您删除该过滤器,它将询问是否应使用图库(具有相机的菜单链接)或者是否应使用声音文件或录制新的声音文件。起点是src/com/android/email/activity/MessageCompose.java
。该方法为onOptionsItemSelected
,附件有switch
case:
。
事实证明,Android SDK仅包含部分apache库,因此HttpClient不存在。我将使用多个请求上传数据,并在其中一个POST参数中输入Base64数据。
答案 0 :(得分:2)
Android上没有专门的文件选择器,因此您必须创建自己的文件选择器:How to create file chooser in Android?
当你说你需要上传到服务器时,你没有指定协议,所以我假设你的意思是经典的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版本。
虽然不确定文件选择部分。