繁体   English   中英

如何在android中将文件上传到服务器?

[英]how to upload file into server in android?

如何使用齐射库将文件(数据)从移动设备发送到服务器。

在这里我列出了我的参数,请帮我解决这个问题。

        Map<String, String> mHeaderPart= new HashMap<>();
            mHeaderPart.put("Content-type", "multipart/form-data;");
            mHeaderPart.put("Authorization", authorizationKey);


    //String part
            Map<String, String> mStringPart= new HashMap<>();
            mStringPart.put("candidate_id", SessionStores.getBullHornId(getActivity()));
            mStringPart.put("externalID", "portpolio");
            mStringPart.put("fileCount", "2");//number of files
            mStringPart.put("fileType", "SAMPLE");
            mStringPart.put("platform", "android");

//file param

     Map<String, File> mFilePartData= new HashMap<>();

在上面的文件参数中,我必须添加n个文件并将其发送到服务器。 如何从设备获取文件并添加带有参数的n个文件并将其发送到服务器,如果有人可以请给我建议。

如果有人有使用凌空使用param发送多个文件的示例,请指导我。 提前致谢。

Volly不提供使用多部分在服务器上上传文件的直接方法。

要使用volly上传多个文件,请按照以下步骤操作:

步骤1:创建一个名为MultipartRequest.java的新类,它从下面扩展请求:

import com.android.volley.AuthFailureError;

import com.android.volley.NetworkResponse;

import com.android.volley.ParseError;

import com.android.volley.Request;

import com.android.volley.Response;

import com.android.volley.VolleyLog;

import com.android.volley.toolbox.HttpHeaderParser;

import org.apache.http.HttpEntity;

import org.apache.http.entity.mime.MultipartEntityBuilder;

import org.apache.http.entity.mime.content.FileBody;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.util.HashMap;

import java.util.Map;

public class MultipartRequest extends Request<String> { private MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create(); HttpEntity entity;

    private HashMap<String, File> sendFile = new HashMap<>();

    /**
    * 
    * @param url               url
    * @param errorListener     volly error listenere
    * @param sendFile          HashMap with key as file name and value as file  object
    */

    public MultipartRequest(String url, Response.ErrorListener errorListener,   HashMap<String, File> sendFile) {
    super(Method.POST, url, errorListener);

    this.sendFile = sendFile;
    buildMultipartEntity();
    entity = entitybuilder.build();
    }

    private void buildMultipartEntity() {

    if (sendFile != null)
        for (Map.Entry<String, File> entry : sendFile.entrySet()) {
            entitybuilder.addPart(entry.getKey(), new    FileBody(entry.getValue()));

            // here you can set key as filename
            // value will be the file object to be upload

        }
    }

    @Override
    public String getBodyContentType() {
    return entity.getContentType().getValue();
    }

    @Override
    public byte[] getBody() throws AuthFailureError {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
        entity.writeTo(bos);
    } catch (IOException e) {
        VolleyLog.e("IOException writing to ByteArrayOutputStream");
    }
    return bos.toByteArray();
    }

    @Override
    protected Response<String> parseNetworkResponse(NetworkResponse networkResponse) {
    try {
        String json = new String(
                networkResponse.data,   HttpHeaderParser.parseCharset(networkResponse.headers));
        return Response.success(json, HttpHeaderParser.parseCacheHeaders(networkResponse));

    } catch (UnsupportedEncodingException e) {
        return Response.error(new ParseError(e));
    }
    }

    @Override
    protected void deliverResponse(String s) {

    //Your response

    }
}

第2步:

从您的活动:

public void executeMultipart(String url,HashMap<String, File> fileData) { 
    try { MultipartRequest mRequest = new MultipartRequest(url , new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) {

            }
        },fileData);
        mRequest.setRetryPolicy(new DefaultRetryPolicy(
                (int) TimeUnit.SECONDS.toMillis(20),
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    } catch (Exception e) {
        e.printStackTrace();
    }
    }

第3步:在你的app build.gradle文件中添加:

compile('org.apache.httpcomponents:httpmime:4.3.6') { exclude module: 'httpclient' }

注意:从API 22 org.apache.http.HttpEntity不推荐使用,所以最好使用URLConnection或者你可以使用改造库都有自己的优点和缺点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM