Android上传文件到服务器

来源:互联网 发布:vue.js 树形菜单插件 编辑:程序博客网 时间:2024/06/05 02:45

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";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);but = (Button) findViewById(R.id.but);but.setOnClickListener(new OnClickListener() {@Overridepublic 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 exceptione.printStackTrace();}}class zixiangcheng implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubmethod(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";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);but=(Button)findViewById(R.id.but);but.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubThread 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 exceptione.printStackTrace();}}class zixiangcheng implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubmethod(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";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);but=(Button)findViewById(R.id.but);but.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubmethod(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() {@Overridepublic 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);}@Overridepublic void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {// TODO Auto-generated method stubSystem.out.println("网络连接错误");}});} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}



0 0
原创粉丝点击