Android上传文件到服务器

1.使用HttpUrlConnection上传文件到服务器

   上传文件比提交数据麻烦。麻烦在于需要配置Html报头。

package com.example.myandroidceshi22;

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 android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button but;
	private static final String PATH="http://192.168.7.15/receive_file.php";
	private static final String END = "\r\n";
	private static final String TWOHYPHENS = "--";
	private static final String BOUNDARY = "******";
	private String srcPath = "/storage/sdcard/img.png";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		but = (Button) findViewById(R.id.but);
		but.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// 当点击按钮执行上传
				Thread thread=new Thread(new zixiangcheng());
				thread.start();
			}
		});
	}

	private void method(String str) {
		try {
			URL url = new URL(str);
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
			connection.setConnectTimeout(5000);// 请求时间
			connection.setRequestMethod("POST");// 设置请求方式
			connection.setDoInput(true);
			connection.setDoOutput(true);
			connection.setUseCaches(false);// 设置缓存
			connection.setRequestProperty("Connection", "keep-alive");
			connection.setRequestProperty("Charset", "UTF-8");// 设置编码
			connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + BOUNDARY);
			DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream());//建立连接
			dataOutputStream.writeBytes(TWOHYPHENS+BOUNDARY+ END);
			// dataOutputStream.writeBytes("username="+"123"+"&");
			dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\""
					+ srcPath.substring(srcPath.lastIndexOf("/") + 1)+"\""+END);
			dataOutputStream.writeBytes(END);
			FileInputStream fileInputStream=new FileInputStream(srcPath);
			byte[] bs=new byte[fileInputStream.available()];
			int count=0;
			while((count=fileInputStream.read(bs))!=-1){
				dataOutputStream.write(bs, 0, count);
			}
			dataOutputStream.writeBytes(END);
			dataOutputStream.writeBytes(TWOHYPHENS+BOUNDARY+TWOHYPHENS+END);
			dataOutputStream.flush();//刷新
			if(connection.getResponseCode()==200){
				InputStream inputStream=connection.getInputStream();
				BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
				String result="";
				String readLine="";
				while((readLine=bufferedReader.readLine())!=null){
					result+=readLine+"\n";
				}
				inputStream.close();
				System.out.println(result);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

	}
	
	class zixiangcheng implements Runnable{

		@Override
		public void run() {
			// TODO Auto-generated method stub
			method(PATH);
		}
		
	}
}

2.使用HttpClient上传文件到服务器

使用此方式上传文件到服务器中时需要导入一个jar包(httpmime-4.2.5.jar)

package com.example.myandroidceshi23;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ContentBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button but;
	private static final String PATH="http://192.168.7.15/receive_file.php";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		but=(Button)findViewById(R.id.but);
		but.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Thread thread=new Thread(new zixiangcheng());
				thread.start();
			}
		});
	}
	
	private void method(String str){
		try {
			HttpClient client=new DefaultHttpClient();
			HttpPost httpPost=new HttpPost(str);
			
//			//上传参数
//			List<NameValuePair> list=new ArrayList<NameValuePair>();
//			BasicNameValuePair nameValuePair=new BasicNameValuePair("username", "123");
//			BasicNameValuePair nameValuePair2=new BasicNameValuePair("userpassword", "dasdsa");
//			list.add(nameValuePair);
//			list.add(nameValuePair2);
//			UrlEncodedFormEntity encodedFormEntity=new UrlEncodedFormEntity(list, "UTF-8");
//			httpPost.setEntity(encodedFormEntity);//提交
			//文件上传
			File file=new File(Environment.getExternalStorageDirectory()+"/img.jpg");//获取文件路径
			MultipartEntity multipartEntity=new MultipartEntity();//声明文件专属Entity的类
			ContentBody body=new FileBody(file);//封装文件的类
			multipartEntity.addPart("uploadedfile", body);
			httpPost.setEntity(multipartEntity);//提交
			HttpResponse httpResponse=client.execute(httpPost);//创建连接
			if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
				HttpEntity entity=httpResponse.getEntity();
				InputStream inputStream=entity.getContent();
				BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
				String result="";
				String readLine="";
				while((readLine=reader.readLine())!=null){
					result+=readLine;
				}
				reader.close();
				inputStream.close();
				System.out.println(result);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}
	
	class zixiangcheng implements Runnable{

		@Override
		public void run() {
			// TODO Auto-generated method stub
			method(PATH);
		}
		
	}

}
3.使用异步框架上传文件到服务器

既然是用一个框架,那么也需要导入一个jar包

package com.example.myandroidceshi24;

import java.io.File;

import org.apache.http.Header;
import org.apache.http.util.EncodingUtils;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button but;
	private static final String PATH="http://192.168.7.15/receive_file.php";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		but=(Button)findViewById(R.id.but);
		but.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				method(PATH);
			}
		});
	}
	//异步框架
	private void method(String str){
		try {
			File file=new File(Environment.getExternalStorageDirectory()+"/img.jpg");
			AsyncHttpClient asyncHttpClient=new AsyncHttpClient();
			RequestParams params=new RequestParams();
			params.put("uploadedfile", file);
			asyncHttpClient.post(str,params, new AsyncHttpResponseHandler() {
				@Override
				public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
					// TODO Auto-generated method stub
//					Bitmap bitmap=BitmapFactory.decodeByteArray(arg2, 0, arg2.length);
					String string=EncodingUtils.getString(arg2, "UTF-8");
					System.out.println(string);
				}
				@Override
				public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
					// TODO Auto-generated method stub
					System.out.println("网络连接错误");
				}
			});
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}

}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值