andorid采用post传输文件到自己写的服务器

42 篇文章 0 订阅
5 篇文章 0 订阅

首先我们来写服务器,需要用到的是这两个包,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值