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

Android 实现文件上传功能(upload)

2013-08-15 09:39 561 查看
文 件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的。下面是一个模拟网站程 序上传文件的例子。这里只写出了Android部分的代码,服务器的代码没有贴出来,有需要完整上传功能代码的朋友可以跟我联系哟…

首先新建一个Android工程,新建主启动Activity:

MainActivity.java:

package com.xzq.upload;

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 = "htys.mp3";

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

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

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

private String actionUrl = "http://192.168.100.100:8080/upload/upload.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=/"file1/";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();

}

}

}

最后别忘了在AndroidManifest.xml中设置访问Internet的权限:

<uses-permission android:name="android.permission.INTERNET" />

在Android中上传文件的原理跟在web中上传文件基本是一致的,代码比较简单,就不多做解释了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐