Android打开系统相册返回一张图片,如何将返回的图片上传到Tomcat服务器中?
文件上传需要用到HttpClient,打开系统相册需要通过内容提供者调用android相册或者文件管理器(源代码查看附件)关于HttpClient的文件上传HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会更加深入。
一、HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。
二、特性
1 基于标准、纯净的java语言。实现了Http10和Http11
2 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
3 支持HTTPS协议。
4 通过Http代理建立透明的连接。
5 利用CONNECT方法通过Http代理建立隧道的https连接。
6 Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos认证方案。
7 插件式的自定义认证方案。
8 便携可靠的套接字工厂使它更容易的使用第三方解决方案。
9 连接管理器支持多线程应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。
10 自动处理Set-Cookie中的Cookie。
11 插件式的自定义Cookie策略。
12 Request的输出流可以避免流中内容直接缓冲到socket服务器。
13 Response的输入流可以有效的从socket服务器直接读取相应内容。
14 在http10和http11中利用KeepAlive保持持久连接。
15 直接获取服务器发送的response code和 headers。
16 设置连接超时的能力。
17 实验性的支持http11 response caching。
18 源代码基于Apache License 可免费获取。
三、使用方法
使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。
1 创建HttpClient对象。
2 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
4 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
5 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
6 释放连接。无论执行方法是否成功,都必须释放连接
利用ftp定时上传log到其他服务器的方法
利用ftp定时上传log到其他服务器 #!/bin/bash #时间的生成 Y=` date --date="-1 hour" +%Y` m=` date --date="-1 hour" +%m` d=`date --date="-1 hour" +%d` H=`date --date="-1 hour" +%H`
IPhone上传到服务器
求助:IPhone上传到服务器 我在网上看到 IPhone上传到服务器用的是PHP的web接收,地址: 我只会aspnet ,请问用ASPnet和IPhone怎么结合实现手机端的上传到服务器上 求助!!! 重点在:if (move_uploaded_file($_FILES['u
android开发以上传到七牛云存储服务器
android开发之上传到七牛云存储服务器 相信很多开发者会把存放到七牛上,我的web站点也是吧存储到七牛上,对于以为主的站点,这样可以节省很大带宽。 将上传到七牛服务器的重点就是获得上传凭证uploadToken,直接把AccessKey和Secret放到客户端太不安全,容易被反编译。所以需要在服务器端根据AccessKey和Secret动态生成一个uploadToken,
服务器端写个servlet,然后在doPost()方法里处理客户端上传的文件,大概代码:
DiskFileItemFactory factory = new DiskFileItemFactory();
factorysetSizeThreshold(1024 1024); // 设置最多只允许在内存中存储的数据, 单位:字节
factorysetRepository(cachepath); // 设置一旦文件大小超过设定值时数据存放的目录
ServletFileUpload srvFileUpload = new ServletFileUpload(factory);
srvFileUploadsetSizeMax(1024 1024 1024); // 设置允许用户上传文件大小, 单位:字节
// 开始读取上传信息
List fileItems = null;
try {
fileItems = srvFileUploadparseRequest(request);
} catch (Exception e) {
Systemoutprintln("获取上传信息。。。。。。失败");
}
// 依次处理每个上传的文件
Iterator iter = fileItemsiterator();
while (iterhasNext()) {
FileItem item = (FileItem) iternext(); // 忽略其他不是文件域的所有表单信息
if (!itemisFormField()) {
// 取出文件域的所有表单信息
} else {
// 取出不是文件域的所有表单信息
}
}
http://1921681212:8011/pd/upload/fileUploaddo;
这个是服务器地址,你要上传的地方。。
理论上是需要一个服务器接收你上传的的!
他这个demo中的url是本地的,目测是写demo的人自己写的用来测试的地址
在配备Android系统的手机中,一般都配备了GPS设备。Android为我们获取GPS数据提供了很好的接口。本文来说一下如何使用Android获取GPS的经纬度。
1 从Service继承一个类。
2 创建startService()方法。
3 创建endService()方法 重载onCreate方法和onDestroy方法,并在这两个方法里面来调用startService以及endService。
4 在startService中,通过getSystemService方法获取ContextLOCATION_SERVICE。
5 基于LocationListener实现一个新类。默认将重载四个方法onLocationChanged、onProviderDisabled、onProviderEnabled、onStatusChanged。对于onLocationChanged方法是我们更新最新的GPS数据的方法。一般我们的操作都只需要在这里进行处理。
6 调用LocationManager的requestLocationUpdates方法,来定期触发获取GPS数据即可。在onLocationChanged函数里面可以实现我们对得到的经纬度的最终操作。
7 最后在我们的Activity里面通过按钮来启动Service,停止Service。
示意代码如下:
package comoffbyegpsservice;
import androidappService;
import androidcontentContext;
import androidcontentIntent;
import androidlocationLocationListener;
import androidlocationLocationManager;
import androidosBinder;
import androidosIBinder;
import androidutilLog;
public class GPSService extends Service {
// 2000ms
private static final long minTime = 2000;
// 最小变更距离10m
private static final float minDistance = 10;
String tag = thistoString();
private LocationManager locationManager;
private LocationListener locationListener;
private final IBinder mBinder = new GPSServiceBinder();
public void startService() {
locationManager = (LocationManager) getSystemService(ContextLOCATION_SERVICE);
locationListener = new GPSServiceListener();
locationManagerrequestLocationUpdates(LocationManagerGPS_PROVIDER, minTime, minDistance,
locationListener);
}
public void endService() {
if (locationManager != null && locationListener != null) {
locationManagerremoveUpdates(locationListener);
}
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return mBinder;
}
@Override
public void onCreate() {
//
startService();
Logv(tag, "GPSService Started");
}
@Override
public void onDestroy() {
endService();
Logv(tag, "GPSService Ended");
}
public class GPSServiceBinder extends Binder {
GPSService getService() {
return GPSServicethis;
}
}
}
GPSServiceListener的实现
package comoffbyegpsservice;
import javatextDateFormat;
import javatextSimpleDateFormat;
import javautilCalendar;
import javautilGregorianCalendar;
import javautilTimeZone;
import androidlocationLocation;
import androidlocationLocationListener;
import androidlocationLocationProvider;
import androidosBundle;
import androidutilLog;
import androidwidgetToast;
public class GPSServiceListener implements LocationListener {
private static final String tag = "GPSServiceListener";
private static final float minAccuracyMeters = 35;
private static final String hostUrl = "http://doandroidinfo/gpsservice/positionphp";
private static final String user = "huzhangyou";
private static final String pass = "123456";
private static final int duration = 10;
private final DateFormat timestampFormat = new SimpleDateFormat("yyyyMMddHHmmss");
public int GPSCurrentStatus;
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
if (location != null) {
if (locationhasAccuracy() && locationgetAccuracy() <= minAccuracyMeters) {
// 获取时间参数,将时间一并Post到服务器端
GregorianCalendar greg = new GregorianCalendar();
TimeZone tz = greggetTimeZone();
int ffset = tzgetOffset(SystemcurrentTimeMillis());
gregadd(CalendarSECOND, (offset / 1000) -1);
StringBuffer strBuffer = new StringBuffer();
strBufferappend(hostUrl);
strBufferappend("user=");
strBufferappend(user);
strBufferappend("&pass=");
strBufferappend(pass);
strBufferappend("&Latitude=");
strBufferappend(locationgetLatitude());
strBufferappend("&Longitude=");
strBufferappend(locationgetLongitude());
strBufferappend("&Time=");
strBufferappend(timestampFormatformat(greggetTime()));
strBufferappend("&Speed=");
strBufferappend(locationhasSpeed());
doGet(strBuffertoString());
Logv(tag, strBuffertoString());
}
}
}
// 将数据通过get的方式发送到服务器,服务器可以根据这个数据进行跟踪用户的行走状态
private void doGet(String string) {
// TODO Auto-generated method stub
//
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
GPSCurrentStatus = status;
}
}
摘自 offbye的技术博客
0条评论