首先我们来写服务器,需要用到的是这两个包,commons-io-2.4.jar和commons-fileupload-1.3.1.jar然后新建一个Web 空工程。
导入这两个包。
然后新建一个servlet来处理上传请求。直接看代码吧。注视很详细。
public class UploadFile extends HttpServlet {
public UploadFile() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// request.setCharacterEncoding("GBK");
String fileDir = getServletContext().getRealPath("");// 指定上传文件的位置
String message = "上传成功";
if (ServletFileUpload.isMultipartContent(request))// 判断是否是上传文件
{
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();// 创建工厂对象
// diskFileItemFactory.setSizeThreshold(1024*20);//设置允许上传的大小
// diskFileItemFactory.setRepository(diskFileItemFactory.getRepository());//设置上传位置
ServletFileUpload fileUpload = new ServletFileUpload(
diskFileItemFactory); // 创建上传对象
try {
List<FileItem> filelist = fileUpload.parseRequest(request);
Iterator<FileItem> iterator = filelist.iterator();
while (iterator.hasNext()) {
FileItem fileItem = iterator.next();// 获取文件对象
if (fileItem.isFormField())// 处理普通的文本提交
{
String name = fileItem.getFieldName();// 获取控件名字
String value = fileItem.getString("utf-8");// 获取值
System.out.println(name + " " + value);
} else {
// 处理文件上传
String filename = fileItem.getName();// 获取名字
System.out.println(filename);
byte[] data = fileItem.get();// 获取数据
FileOutputStream fileOutputStream = new FileOutputStream(
fileDir + "/" + filename);// 创建我呢见
fileOutputStream.write(data);// 写入文件
fileOutputStream.close();// 关闭文件流
response.getOutputStream().write(message.getBytes()); // 返回上传成功结果
response.getOutputStream().close();// 关闭连接
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
然后就是andorid这边的代码了,andorid要上传文件也需要引入一个包httpmine-4.2.5.jar这个包。待会我会在代码里面上传一起上传。
看看我写的android端的文件上传方法吧。
/****
* 网络操作
* @author bobo
*
*/
public class Http {
private static Http mhttp;
private HttpClient client = null;
private Http() {
HttpParams httpParams = new BasicHttpParams();
//设置http的参数
HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(httpParams, "UTF-8");
HttpProtocolParams.setUseExpectContinue(httpParams, true);
//设置支持http 和https的两种方式
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
//启用安全多线程实现多任务
ClientConnectionManager manager = new ThreadSafeClientConnManager(httpParams, registry);
//完成创建
client = new DefaultHttpClient(manager, httpParams);
}
public static Http getInstance() {
if (mhttp == null) {
mhttp = new Http();
}
return mhttp;
}
/**
* 销毁实例
*/
public void shutdown() {
if (client != null && client.getConnectionManager() != null) {
client.getConnectionManager().shutdown();
}
}
/**
* 像服务器发送东西
* @param path
*/
public void putFileToInernet(String url ,String path) {
HttpPost httppost = new HttpPost(url);
File file = new File(path);
if (file.exists()) {
System.out.println("文件存在");
}
//设置兼容模式解决中文编码问题
MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null, Charset.forName("UTF-8"));
try {
StringBody userId = new StringBody("我草",Charset.forName("UTF-8"));
//
mpEntity.addPart("name", userId);
// userId = new StringBody("pic");
// mpEntity.addPart("name", userId);
FileBody cbFile = new FileBody(file);
mpEntity.addPart("file", cbFile);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//head.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
httppost.setEntity(mpEntity);
//System.out.println("executing request " + httppost.getRequestLine());
try {
HttpResponse httpResponse = client.execute(httppost);
System.out.println(httpResponse.getStatusLine().getStatusCode());
// Log.i("cuit", "" + httpResponse.getStatusLine().getStatusCode());
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String doPost(String url, List<NameValuePair> params) {
return doPost(url, params, "UTF-8");
}
public synchronized String doPost(String url, List<NameValuePair> params, String code) {
//HttpEntity entity = new Defaulthttp
String result = null;
HttpPost post = new HttpPost(url);
HttpEntity entity = null;
try {
entity = new UrlEncodedFormEntity(params, code);
post.setEntity(entity);
HttpResponse httpResponse = client.execute(post);
if (httpResponse != null && httpResponse.getStatusLine().getStatusCode() == 200) {
result = EntityUtils.toString(httpResponse.getEntity());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
return result;
}
public synchronized String doGet(String url) {
return doGet(url, "utf-8");
}
public String doGet(String url, String code) {
String result = null;
HttpGet get = new HttpGet(url);
try {
HttpResponse httpResponse = client.execute(get);
if (httpResponse != null && httpResponse.getStatusLine().getStatusCode() == 200) {
result = EntityUtils.toString(httpResponse.getEntity());
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
return result;
}
public static void main(String arg[])
{
Http http = Http.getInstance();
http.putFileToInernet("http://127.0.0.1:8080/FileUploadDemo/servlet/UploadFile","E:\\eclipse\\workspace\\Libraytest\\src\\我.pdf");
}
}
然后看看activity里面的代码
public class MainActivity extends Activity implements Runnable {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.upload).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
new Thread(MainActivity.this).start();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void run() {
// TODO Auto-generated method stub
Http http = Http.getInstance();
int result = http.putFileToInernet("http://222.18.159.55:8080/FileUploadDemo/servlet/UploadFile",
"mnt/sdcard/光宇密保卡.jpg");
if (result == 200) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "上传成功", 0).show();
}
});
}
}
}
这里给出我的下载地址:http://download.csdn.net/detail/shengbo1992/7426303