首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何一次性发送文件和数据?

如何一次性发送文件和数据?
EN

Stack Overflow用户
提问于 2014-10-12 03:25:07
回答 1查看 1.6K关注 0票数 0

我使用来自客户端的http-mime库将多部分POST发送到服务器以发送文件和数据。

但是,我不知道如何在单个POST请求中发送带有文件的数据(params)

我使用这个作为参考:http://vikaskanani.wordpress.com/2011/01/11/android-upload-image-or-file-using-http-post-multi-part/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-12 04:44:27

我使用mime4j库完成了以下操作:

代码语言:javascript
复制
//Imports
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.james.mime4j.stream.NameValuePair;

//Adding data
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new NameValuePair("caption", sCaption));// String
    nameValuePairs.add(new NameValuePair("email", device_id));// String
    nameValuePairs.add(new NameValuePair("uploadedfile", path));//File path
    post(URLs.photoUpload, nameValuePairs);// Calling post function

//post function
    public void post(final String url, final List<NameValuePair> nameValuePairs) {
        // Setting progressDialog properties
        final ProgressDialog progressDialog = ProgressDialog.show(
                PhotoActivity.this, "", "Posting To Server...");

        final Handler mHandler = new Handler();
        // Function to run after thread
        final Runnable mUpdateResults = new Runnable() {
            public void run() {

                if (server) {
                    server = false;
                    Toast.makeText(getBaseContext(), "Posted To Server!",
                            Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getBaseContext(), "Error!",
                            Toast.LENGTH_SHORT).show();
                }
            }
        };
        new Thread() {
            @Override
            public void run() {

                System.out.println("URL:::" + url);
                System.out.println("SIZE:::" + nameValuePairs.size());
                // ///////////////
                HttpClient httpClient = new DefaultHttpClient();
                HttpContext localContext = new BasicHttpContext();
                HttpPost httpPost = new HttpPost(url);

                try {
                    MultipartEntity entity = new MultipartEntity(
                            HttpMultipartMode.BROWSER_COMPATIBLE);

                    for (int index = 0; index < nameValuePairs.size(); index++) {
                        if (nameValuePairs.get(index).getName()
                                .equalsIgnoreCase("uploadedfile")) {
                            // If the key equals to "image", we use FileBody
                            // to transfer the data
                            entity.addPart(
                                    nameValuePairs.get(index).getName(),
                                    new FileBody(new File(nameValuePairs.get(
                                            index).getValue())));
                        } else {
                            // Normal string data
                            entity.addPart(nameValuePairs.get(index).getName(),
                                    new StringBody(nameValuePairs.get(index)
                                            .getValue()));
                        }
                    }

                    httpPost.setEntity(entity);

                    HttpResponse response = httpClient.execute(httpPost,
                            localContext);
                    System.out.println(response.toString());
                    server = true;
                } catch (IOException e) {
                    e.printStackTrace();
                    server = false;
                }

                // dismiss the progress dialog
                progressDialog.dismiss();
                // Calling handler's post function
                mHandler.post(mUpdateResults);

            }
        }.start();

    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26321548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档