解决方案 »

  1.   

    。 没有把网络操作放在主线程里面。 你可以考虑把文件内容打成JSON格式 发给TOMCAT HTTP接口
      

  2.   

    混个分,logcat的日志没有贴对,分析不出来
      

  3.   

    还是要自己去看懂代码再进行修改的,别人很少能有跟你一模一样的需求,或者都跟自己的项目有其他文件或函数的关联。
    我这里有一个多个文件上传的,你自己看看改成单个的上传吧。/**
     * Copyright (C) 2013 
     * This file write by finger in 2014年11月1日,mail:[email protected]
     */
    package com.ewell.mobile.gooddriving.common;import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.List;import android.app.ProgressDialog;
    import android.content.Context;
    import android.os.AsyncTask;import com.zjhcsoft.mobile.framework.bean.ImageFileInfo;
    import com.zjhcsoft.mobile.framework.utils.StringUtils;/**
     * 上传文件
     * 
     * @author finger
     * @version V1.0
     */
    public class FileUploadAction extends AsyncTask<String, Integer, String> {
    /** 上下文 */
    // private Context context = null; /** 进度对话框 */
    private ProgressDialog proDialog = null; /** 上传url */
    private String url = ""; /** 文件列表 */
    private List<ImageFileInfo> fileList = null; /** 已传送文件总大小 */
    private long sumSize = 0; /**
     * 构造函数
     * 
     * @param context
     *            上下文
     * @param url
     *            上传URL
     * @param fileList
     *            文件列表
     */
    public FileUploadAction(Context context, String url,
    List<ImageFileInfo> fileList) {
    super();
    // this.context = context;
    this.url = url;
    this.fileList = fileList;
    proDialog = new ProgressDialog(context);
    proDialog.setMessage("正在上传文件");
    proDialog.setIndeterminate(false);
    proDialog.setCancelable(false);
    proDialog.setMax(fileList.size());
    proDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    proDialog.show();
    } /*
     * (non Javadoc)<p>Title: doInBackground</p><p>Description: </p>
     * 
     * @param arg0
     * 
     * @return
     * 
     * @see android.os.AsyncTask#doInBackground(java.lang.Object[])
     */
    @Override
    protected String doInBackground(String... params) {
    // 文件传输交易
    try {
    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(5 * 1000);
    conn.setDoInput(true);// 允许输入
    conn.setDoOutput(true);// 允许输出
    conn.setUseCaches(false);
    conn.setRequestMethod("POST"); // Post方式
    conn.setRequestProperty("connection", "keep-alive");
    conn.setRequestProperty("Charsert", "UTF-8");
    conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
    + ";boundary=" + BOUNDARY);
    DataOutputStream outStream = new DataOutputStream(
    conn.getOutputStream());
    // 发送文件数据
    if (fileList != null && fileList.size() > 0)
    for (int i = 0; i < fileList.size(); i++) {
    StringBuilder sb = new StringBuilder();
    sb.append(PREFIX);
    sb.append(BOUNDARY);
    sb.append(LINEND);
    sb.append("Content-Disposition: form-data; name=\"file\"; filename=\""
    + fileList.get(i).getFileName() + "\"" + LINEND);
    sb.append("Content-Type: application/octet-stream; charset="
    + CHARSET + LINEND);
    sb.append(LINEND);
    outStream.write(sb.toString().getBytes());
    InputStream is = new FileInputStream(fileList.get(i)
    .getFullPath());
    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());
    sumSize += fileList.get(i).getFileSize();
    publishProgress(Long.valueOf(sumSize / 1024).intValue());
    }
    // 请求结束标志
    byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
    outStream.write(end_data);
    outStream.flush();
    // 得到响应码
    int res = conn.getResponseCode(); if (res == 200) {
    InputStream in = conn.getInputStream();
    InputStreamReader isReader = new InputStreamReader(in);
    BufferedReader bufReader = new BufferedReader(isReader);
    String line = null;
    String resultStr = "";
    while ((line = bufReader.readLine()) != null)
    resultStr += line;
    if (!StringUtils.isEmpty(resultStr)) {
    // 返回xml
    outStream.close();
    conn.disconnect();
    return resultStr;
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    return "";
    } /*
     * (non Javadoc)<p>Title: onPostExecute</p><p>Description: </p>
     * 
     * @param result
     * 
     * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
     */
    @Override
    protected void onPostExecute(String result) {
    super.onPostExecute(result);
    } /*
     * (non Javadoc)<p>Title: onProgressUpdate</p><p>Description: </p>
     * 
     * @param values
     * 
     * @see android.os.AsyncTask#onProgressUpdate(java.lang.Object[])
     */
    @Override
    protected void onProgressUpdate(Integer... values) {
    super.onProgressUpdate(values);
    }
    }