android post上传文件到服务器

原创 2015年07月09日 14:36:46

/***************通过拼接的方式构造请求内容,实现参数传输以及文件传输****************/

public static String post(String url, Map<String, String> params, Map<String, File> files)
        throws IOException {
    String BOUNDARY = java.util.UUID.randomUUID().toString();
    String PREFIX = "--", LINEND = "\r\n";
    String MULTIPART_FROM_DATA = "multipart/form-data";
    String CHARSET = "UTF-8";


    URL uri = new URL(url);
    HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
    conn.setReadTimeout(10 * 1000); // 缓存的最长时间
    conn.setDoInput(true);// 允许输入
    conn.setDoOutput(true);// 允许输出
    conn.setUseCaches(false); // 不允许使用缓存
    conn.setRequestMethod("POST");
    conn.setRequestProperty("connection", "keep-alive");
    conn.setRequestProperty("Charsert", "UTF-8");
    conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);


    // 首先组拼文本类型的参数
    StringBuilder sb = new StringBuilder();
    for (Map.Entry<String, String> entry : params.entrySet()) {
        sb.append(PREFIX);
        sb.append(BOUNDARY);
        sb.append(LINEND);
        sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINEND);
        sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
        sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
        sb.append(LINEND);
        sb.append(entry.getValue());
        sb.append(LINEND);
    }


    DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
    outStream.write(sb.toString().getBytes());
    // 发送文件数据
    if (files != null)
        for (Map.Entry<String, File> file : files.entrySet()) {
            StringBuilder sb1 = new StringBuilder();
            sb1.append(PREFIX);
            sb1.append(BOUNDARY);
            sb1.append(LINEND);
            sb1.append("Content-Disposition: form-data; name=\"picture\"; filename=\""
                    + file.getValue().getName() + "\"" + LINEND);
            sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);
            sb1.append(LINEND);
            outStream.write(sb1.toString().getBytes());


            InputStream is = new FileInputStream(file.getValue());
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = is.read(buffer)) != -1) {
                outStream.write(buffer, 0, len);
            }


            is.close();
            outStream.write(LINEND.getBytes());
        }
    // 请求结束标志
    byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
    outStream.write(end_data);
    outStream.flush();
    // 得到响应码
    int res = conn.getResponseCode();
    InputStream in = conn.getInputStream();
    StringBuilder sb2 = new StringBuilder();
    if (res == 200) {
        int ch;
        while ((ch = in.read()) != -1) {
            sb2.append((char) ch);
        }
    }
    outStream.close();
    conn.disconnect();
    return sb2.toString();
}

调用:
private void uploadImageFile(){
new Thread(new Runnable() {
@Override
public void run() {
int uploadResult = UPLOAD_FAIl;
//String requestURL = RequestUrl.URL + RequestUrl.Auth;
String requestURL = “http://192.168.1.68:8083“+RequestUrl.Auth;//局域网测试
//String requestURL = “http://192.168.1.68:8083/personal/test.html“;

            final Map<String, String> params = new HashMap<String, String>();



            String organizationId = mExpressCompanyToIdMap.get(mCompanyName);

            params.put("account",account);
            params.put("name", mRealName);
            params.put("organizationId", "1");//公司Id
            //params.put("provinceId", "110000");/*数据库查找*/
            //params.put("cityId", "110100");
            //params.put("areaId", "110101");
            params.put("address", "北京市朝阳区酒仙桥东路");

            final Map<String, File> files = new HashMap<String, File>();
            //(debug)File file = new File (Environment.getExternalStorageDirectory().getAbsolutePath(),"/UCDownloads/4.jpg");
            Log.i("PATH+++++++++++NAME", file.getPath()+","+file.getName());

            files.put("picture", file);
            String request = null;
            try {
                request = FileImageUpload.post(requestURL, params, files);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Log.i("TAg","=======request==========="+request);
            JSONObject jsonObject = null;
            try {
                jsonObject = new JSONObject(request);
            } catch (JSONException e) {
                mHandler.sendEmptyMessage(uploadResult);
                e.printStackTrace();
            }
            try {
                if(jsonObject.getString("resultCode").equals("00000"))
                {
                    uploadResult = UPLOAD_SUCCESS;
                    mHandler.sendEmptyMessage(uploadResult);
                    Log.d("UploadImage", "上传成功" + "resultMessage:" + jsonObject.getString("resultMessage"));
                }
                else{

                    mHandler.sendEmptyMessage(uploadResult);
                    Log.d("UploadImage","上传失败");
                }
            } catch (JSONException e) {
                mHandler.sendEmptyMessage(uploadResult);
                Log.d("UploadImage网络异常","上传失败");
                e.printStackTrace();
            }
        }
    }).start();

更新UI:
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what)
{
case UPLOAD_SUCCESS:
{
//上传验证图片成功
Toast.makeText(IdentifyActivity.this,getResources().getString(R.string.info_upload_success).toString(),Toast.LENGTH_LONG).show();
finish();
break;
}
case UPLOAD_FAIl:
{
//上传图片失败
Toast.makeText(IdentifyActivity.this,getResources().getString(R.string.info_upload_fail).toString(),Toast.LENGTH_LONG).show();
break;
}

            }
        }
    };

Android 上传文件到服务器实例详解

本实例实现每隔5秒上传一次,通过服务器端获取手机上传过来的文件信息并做相应处理;采用Android+Struts2技术。 一、Android端实现文件上传 1)、新建一个Android项目命名为an...
  • xyz_1991
  • xyz_1991
  • 2016年05月05日 10:18
  • 20288

Android 上传文件,图片。以及服务器端接收相关。

前面一篇文章写了实现照相功能的一个例子,其实那个实现效果是个略缩图。要查看全图就要先指定照片的存放路径。以后我会修改那个文章。今天先说下图片,文件等上传的实现。接着拿照片说事,光照完了不行还得往服务器...

android 用post方式上传图片到服务器

文章转自 nosxcy /**  * 上传文件到服务器类  *   * @author tom  */ public class UploadUtil {     pri...

android WebView上传文件到服务器[android+server代码]

最近比较坑爹,公司app部分页面要转H5,美其名曰称之为节约人力成本,无奈,我们就从后台PHP,JQuery从零开始学起。项目中遇到这么一个问题:要从android的WebView中上传用户头像到服务...

Android端通过HttpURLConnection上传文件到服务器

基于HttpURLConnection实现android端上传文件到服务器端。

Android上传文件到Web服务器,PHP接收文件(一)

Android上传文件到服务器,通常采用构造http协议的方法,模拟网页POST方法传输文件,服务器端可以采用JavaServlet或者PHP来接收要传输的文件。使用JavaServlet来接收文件的...
  • sxwyf248
  • sxwyf248
  • 2011年11月25日 16:19
  • 38387

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

android通过servlet上传文件到服务器

服务器端:部署在Tomcat上,直接在myEclipse上开发即可 package com; import java.io.BufferedInputStream; import java.io....

android选择图片或拍照图片上传到服务器(包括上传参数)

服务器servlet代码 publicvoid doPost(HttpServletRequest request, HttpServletResponse response)            ...

Android上传文件到服务器--带进度条

本人以前是学C#的,所以服务器端有了一般处理程序进行接收文件流操作。 import android.app.ProgressDialog; import android.content.Context...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android post上传文件到服务器
举报原因:
原因补充:

(最多只允许输入30个字)