您的位置:首页 > 移动开发 > Android开发

android文件上传

2016-05-06 17:56 441 查看
import java.io.DataOutputStream;

import java.io.FileInputStream;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity

{

private String newName = "xxx.mp3";

//要上传的本地文件路径

private String uploadFile = "/data/data/com.xzq/xxx.mp3";

//上传到服务器的指定位置

private String actionUrl = "http://xxx/upload/xxx.jsp";

private TextView mTextView1;

private TextView mTextView2;

private Button mButton1;

@Override

public void onCreate(Bundle
savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mTextView1 =
(TextView) findViewById(R.id.myText2);

mTextView1.setText("FilePath:/n" + uploadFile);

mTextView2 =
(TextView) findViewById(R.id.myText3);

mTextView2.setText("UploadPath:/n" + actionUrl);

/* 设定mButton的onClick事件处理 */

mButton1 =
(Button) findViewById(R.id.myButton);

mButton1.setOnClickListener(new View.OnClickListener()

{

public void onClick(View
v)

{

uploadFile();

}

});

}

private void uploadFile()

{

String end = "/r/n";

String Hyphens = "--";

String boundary = "*****";

try

{

URL url = new URL(actionUrl);

HttpURLConnection con = (HttpURLConnection) url.openConnection();

/* 允许Input、Output,不使用Cache
*/

con.setDoInput(true);

con.setDoOutput(true);

con.setUseCaches(false);

/* 设定传送的method=POST
*/

con.setRequestMethod("POST");

/* setRequestProperty */

con.setRequestProperty("Connection", "Keep-Alive");

con.setRequestProperty("Charset", "UTF-8");

con.setRequestProperty("Content-Type",

"multipart/form-data;boundary=" +
boundary);

/* 设定DataOutputStream
*/

DataOutputStream ds = new DataOutputStream(con.getOutputStream());

ds.writeBytes(Hyphens + boundary + end);

ds.writeBytes(
"Content-Disposition: form-data; name=\"avatar\"; filename=\""+newName+"\""+end

);

ds.writeBytes(end);

/* 取得文件的FileInputStream
*/

FileInputStream fStream = new FileInputStream(uploadFile);

/* 设定每次写入1024bytes
*/

int bufferSize
= 1024;

byte[]
buffer = new byte[bufferSize];

int length
= -1;

/* 从文件读取数据到缓冲区 */

while ((length
= fStream.read(buffer)) != -1)

{

/* 将数据写入DataOutputStream中 */

ds.write(buffer, 0, length);

}

ds.writeBytes(end);

ds.writeBytes(Hyphens + boundary + Hyphens + end);

fStream.close();

ds.flush();

/* 取得Response内容 */

InputStream is = con.getInputStream();

int ch;

StringBuffer b = new StringBuffer();

while ((ch
= is.read()) != -1)

{

b.append((char)
ch);

}

System.out.println("上传成功");

Toast.makeText(MainActivity.this, "上传成功",
Toast.LENGTH_LONG)

.show();

ds.close();

} catch (Exception
e)

{

System.out.println("上传失败" +
e.getMessage());

Toast.makeText(MainActivity.this, "上传失败" +
e.getMessage(),

Toast.LENGTH_LONG).show();

}

}

}

第二种方法使用httpmime-4.1.2.jar

HttpClient httpclient = new DefaultHttpClient();

httpclient.getParams().setParameter(

CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

HttpPost httppost = new HttpPost(actionUrl);

MultipartEntity entity = new MultipartEntity();

FileBody fileBody = new FileBody(uploadFile);

entity.addPart("avatar", fileBody); //<input type="file" name="avatar" id="fileToUpload"/>

httppost.setEntity(entity);

HttpResponse response = httpclient.execute(httppost);

HttpEntity resEntity = response.getEntity();

if (resEntity != null) {

HTTPTools.Log(EntityUtils.toString(resEntity) );

}

if (resEntity != null) {

resEntity.consumeContent();

}

httpclient.getConnectionManager().shutdown();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: