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();
}
}
}