16

这是从 Android 发布文件的简单方法。

String url = "http://yourserver.com/upload.php";
File file = new File("myfileuri");
try {
    HttpClient httpclient = new DefaultHttpClient();

    HttpPost httppost = new HttpPost(url);

    InputStreamEntity reqEntity = new InputStreamEntity(new FileInputStream(file), -1);
    reqEntity.setContentType("binary/octet-stream");
    reqEntity.setChunked(true); // Send in multiple parts if needed
    httppost.setEntity(reqEntity);
    HttpResponse response = httpclient.execute(httppost);
    //Do something with response...

} catch (Exception e) {
    e.printStackTrace();
}  

我想要做的是POST向我的请求添加更多变量。我怎么做?在POST请求中上传纯字符串时,我们使用URLEncodedFormEntity.

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

而在上传文件时,我们使用InputStreamEntity.

另外,我如何专门将此文件上传到$_FILES['myfilename']

4

4 回答 4

1

最有效的方法是使用android-async-http

您可以使用此代码上传文件:

 

    File myFile = new File("/path/to/file.png");
    RequestParams params = new RequestParams();
    try {
        params.put("profile_picture", myFile);
    } catch(FileNotFoundException e) {}

于 2014-07-31T19:32:45.900 回答
1

花了一整天的时间找到了loopj。您可以按照以下代码示例进行操作:

//context: Activity context, Property: Custom class, replace with your pojo
public void postProperty(Context context,Property property){
        // Creates a Async client. 
        AsyncHttpClient client = new AsyncHttpClient();
         //New File
        File files = new File(property.getImageUrl());
        RequestParams params = new RequestParams();
        try {
            //"photos" is Name of the field to identify file on server
            params.put("photos", files);
        } catch (FileNotFoundException e) {
            //TODO: Handle error
            e.printStackTrace();
        }
        //TODO: Reaming body with id "property". prepareJson converts property class to Json string. Replace this with with your own method 
        params.put("property",prepareJson(property));
        client.post(context, baseURL+"upload", params, new AsyncHttpResponseHandler() {
            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                System.out.print("Failed..");
            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                System.out.print("Success..");
            }
        });

    }
于 2016-05-15T15:27:27.720 回答
0

由于您想从应用程序上传文件,因此这里有一个很好的教程:

在 Android 上使用 POST 将文件上传到 HTTP 服务器。

如果你也想上传字符串,我想你已经知道解决方案了:)

于 2013-04-12T10:00:31.760 回答
0

给你几个方法:

  • 提出 2 个发布请求:首先使用图像文件。服务器返回一个图像 id,并在第二个请求中附加到这个 id 你的参数。

  • 或者,您可以使用MultipartEntityrequest 来代替“2 request”解决方案。在这里查看更多数据

于 2013-08-13T14:23:53.350 回答