- 浏览: 137746 次
- 性别:
文章分类
- 全部博客 (226)
- Android (181)
- C# (8)
- BOOTSTRAP (1)
- ASP.NET MVC4 (1)
- 设计模式 (1)
- VB.NET (1)
- WPF (0)
- PLC (0)
- 电气图纸 (0)
- 数据库 (5)
- Java (5)
- Window phone (0)
- 仪器仪表 (0)
- 变频器 (0)
- 低压电器 (0)
- 物联网 (0)
- Photoshop (1)
- SVN (1)
- 单片机 (5)
- IT (1)
- Android_IOS风格 (0)
- Android_广告栏展示 (0)
- Android_动画 (1)
- Android_Adapter (0)
- Android_ListView (1)
- Android_File (2)
- Android_表单提交 (0)
- Android_WebView (1)
- PHP (2)
- Android_Excel (1)
- Android_drawable (1)
- Android_theme (2)
- Android_phonegap (2)
- Android_AndroidManifest (1)
- ThinkPHP (0)
- Jquery (1)
- Android_ContentProvider (1)
最新评论
class myThread implements Runnable{ @Override public void run() { try { File file = compressPicture(imagePath); Map<String,String> entryText = new HashMap<String,String>(); String lgtd="",lttd="",tptime=""; try { float[] output = new float[2]; ExifInterface exif = new ExifInterface(imagePath); exif.getLatLong(output); lttd = ""+output[0]; lgtd = ""+output[1]; tptime = PeaceUtil.parseDate(exif.getAttribute(ExifInterface.TAG_DATETIME)); //格式化拍照时间 } catch (IOException e) { e.printStackTrace(); } //取出图片信息 int len=imagePath.lastIndexOf("/"); Editor editor=sp_userParam.edit(); entryText.put("filename", imagePath.substring(len+1)); entryText.put("lgtd", lgtd==null?"0":lgtd); //经度 entryText.put("lttd", lttd==null?"0":lttd); //维度 entryText.put("tm", tptime); //拍照时间 entryText.put("opeator", imagerView.getText().toString()); //拍照人 String useridString=sp_userParam.getString("USERID", null); entryText.put("userid", useridString.substring(1,useridString.length()-1)); //用户ID entryText.put("eventsource", eventName); //事件来源 entryText.put("intro", imageInfoView.getText().toString()); //照片描述 /***************************************************************/ FileInfo fileinfo = new FileInfo(file); List<FileInfo> list = new ArrayList<FileInfo>(); list.add(fileinfo); int result=0; result = PostFile.getInstance().post(Const.uploadUrl, entryText, list); Message msg = new Message(); msg.what = result; handler.sendMessage(msg); } catch (Exception e) { dialog.dismiss(); e.printStackTrace(); } } }
private final static String LINEND = "\r\n"; private final static String BOUNDARY = "---------------------------7da2137580612"; //数据分隔线 private final static String PREFIX = "--"; private final static String MUTIPART_FORMDATA = "multipart/form-data"; private final static String CHARSET = "utf-8"; private final static String CONTENTTYPE = "application/octet-stream"; /** * HTTP上传单个文件 * @param actionUrl 请求服务器的路径 * @param params 传递的表单内容 * @param files 单个文件信息 * @return */ public int post(String actionUrl,Map<String,String> params,List<FileInfo> fileInfos){ Log.i("post-------------", "postfile"); HttpURLConnection urlConn = null; BufferedReader br = null; try { //新建url对象 URL url = new URL(actionUrl); //通过HttpURLConnection对象,向网络地址发送请求 urlConn = (HttpURLConnection)url.openConnection(); //设置该连接允许读取 urlConn.setDoOutput(true); //设置该连接允许写入 urlConn.setDoInput(true); //设置不能适用缓存 urlConn.setUseCaches(false); //设置连接超时时间 urlConn.setConnectTimeout(3000); //设置连接超时时间 //设置读取时间 urlConn.setReadTimeout(4000); //读取超时 //设置连接方法post urlConn.setRequestMethod("POST"); //设置维持长连接 urlConn.setRequestProperty("connection", "Keep-Alive"); //设置文件字符集 urlConn.setRequestProperty("Charset", CHARSET); //设置文件类型 urlConn.setRequestProperty("Content-Type", MUTIPART_FORMDATA+";boundary="+BOUNDARY); /********************************************************************/ DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream()); //构建表单数据 String entryText = bulidFormText(params); dos.write(entryText.getBytes()); int index = 1; for (FileInfo fileInfo : fileInfos){ StringBuffer sb = new StringBuffer(""); sb.append(PREFIX+BOUNDARY+LINEND) .append("Content-Disposition: form-data;" + " name=\""+fileInfo.getFileTextName()+(++index)+"\";" + " filename=\""+fileInfo.getImgFile().getAbsolutePath()+"\""+LINEND) .append("Content-Type:"+CONTENTTYPE+";" + "charset="+CHARSET+LINEND) .append(LINEND); dos.write(sb.toString().getBytes()); FileInputStream fis = new FileInputStream(fileInfo.getImgFile()); byte[] buffer = new byte[10000]; int len = 0; while ((len = fis.read(buffer)) != -1) { dos.write(buffer, 0, len); } dos.write(LINEND.getBytes()); fis.close(); } //请求的结束标志 byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes(); dos.write(end_data); dos.flush(); dos.close(); // 发送请求数据结束 //接收返回信息 int code = urlConn.getResponseCode(); if(code!=200){ urlConn.disconnect(); return code; }else{ br = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); String result = ""; String line = null; while((line = br.readLine())!=null){ result += line; } Log.i("post-------------", result); if("true".equals(result)){ return 200; }else{ return 500; } } } catch (Exception e) { e.printStackTrace(); Log.e("--------上传图片错误--------", e.getMessage()); return -1; }finally{ try { if(br!=null){ br.close(); } if(urlConn!=null){ urlConn.disconnect(); } } catch (Exception e) { e.printStackTrace(); } } }
上传文件的Http 请求信息分为4种
1、分界符
-- +"-------------数字"+"\r\n"
2、上传文件的相关信息
a-请求的参数名 b-上传的文件名 c-文件类型 d-
Content-Disposition:form-data;
name="file";
filename="abc.jpg"
3、上传文件内容的字节流形式
Content-type:application/octet-stream
charset:utf-8
4、文件全部上传完成后的结束符
-- +"-------------数字"+ -- +"\r\n"
服务器上传接口URL源码
/** * 上传图片 * @return */ @RequestMapping(value="/image/upload",method={RequestMethod.POST}) public @ResponseBody Boolean imageUpload(MultipartHttpServletRequest request,Timestamp tm){ String userid = request.getParameter("userid"); String intro = request.getParameter("intro"); String mmtype = request.getParameter("mmtype"); String eventsource = request.getParameter("eventsource"); String opeator = request.getParameter("opeator"); Double lgtd = NumberUtils.toDouble(request.getParameter("lgtd"), 0); Double lttd = NumberUtils.toDouble(request.getParameter("lttd"), 0); String ftypetime = sdf.format(new Date()); //List<MultipartFile> imgFiles = request.getFiles("imgFile"); Map<String,MultipartFile> fileMap = request.getFileMap(); if(fileMap==null || fileMap.isEmpty()) return false; int index = 0; for(Entry<String, MultipartFile> entry: fileMap.entrySet()){ MultipartFile imgFile = entry.getValue(); //UUID标示符 String uid = UUID.randomUUID().toString(); MobilePhoto mp = new MobilePhoto(); String filename = sdf.format(new Date()) +"."+StringUtils.getFilenameExtension(imgFile.getOriginalFilename()); mp.setFilename(filename); mp.setTm(tm); mp.setLgtd(lgtd); mp.setLttd(lttd); mp.setUserid(userid); mp.setIntro(intro); mp.setEventsource(eventsource); mp.setId(uid); mp.setUploadtm(new Timestamp(System.currentTimeMillis())); mp.setOpeator(opeator); mp.setMmtype(StringUtils.hasText(mmtype) ? mmtype : "image/png"); mp.setFtype(StringUtils.hasText(mmtype) && mmtype.indexOf("video") >= 0 ? "20" : "10"); mp.setFtypetime(ftypetime); try { BufferedImage src = javax.imageio.ImageIO.read(imgFile.getInputStream()); if(src != null){ //图片 mp.setWidth(src.getWidth()); //图片宽度 mp.setHeight(src.getHeight()); //图片高度 }else{ //视频 mp.setWidth(0); mp.setHeight(0); } mp.setPhotostream(imgFile.getBytes()); riService.addMobilePhoto(mp); index++; } catch (IOException e) { log.error(e); } } return index==0 ? false : true; }
发表评论
-
LayoutInflater
2014-12-22 21:43 511在实际开发中LayoutInflater这个类还是非常有用的, ... -
ContentProvider之读写短消息
2014-12-08 11:08 565http://blog.csdn.net/liuhe ... -
android之启用默认浏览器
2014-11-03 12:36 480一、启动android默认浏览器 Intent inten ... -
eclipse下看android support v4源码
2014-09-18 22:24 600http://cfy10.blog.51cto.com/707 ... -
Android学习 (七)synchronized
2014-09-17 10:16 582http://hi.baidu.com/fenghuang12 ... -
ScheduledExecutorService定时周期执行指定的任务
2014-09-17 09:57 636http://blog.csdn.net/tsyj810883 ... -
android rotate
2014-09-16 15:21 1172rotate:fromDegrees:其实角度。toDegr ... -
Android获取Manifest中<meta-data>元素的值
2014-09-12 15:39 641在AndroidManifest.xml中,<meta- ... -
PopupWindow
2014-09-12 11:09 8471-初始化 PopupWindow mPop = new P ... -
Android的事件分发onInterceptTouchEvent与onTouchEvent、OnClickListener、OnLongClick
2014-09-11 11:05 869onInterceptTouchEvent()是ViewGro ... -
scrollTo、scrollBy、getScrollX、getScrollY这4个方法的含义,Scroller的简单用法
2014-09-11 10:43 1514scrollTo、scrollBy都是 对 ... -
VelocityTracker
2014-09-11 10:14 650android.view.VelocityTracker主要用 ... -
Android之SurfaceHolder
2014-09-09 16:05 568SurfaceHolder,可以把它当成surface的控制器 ... -
android performClick使用
2014-09-09 13:53 1111performClick 是使用代码主动去调用控件的点击事件( ... -
slidingmenu使用说明
2014-09-07 10:17 584左侧、右侧和两边 在BaseActivity中将Slid ... -
Android之SlidingMenu属性详解
2014-09-07 09:52 624SlidingMenu 常用属性介绍: menu.setMod ... -
Android IOS风格侧边栏效果
2014-08-27 13:45 319http://download.csdn.net/detail ... -
android 代码设置、打开wifi热点及热点的连接
2014-08-26 10:30 1006见博客文章 http://blog.csdn.net/luob ... -
Android 之两点触摸技术
2014-08-26 09:58 712package mobile.android.multi.to ... -
Android动画之translate(位移动画)
2014-08-25 15:53 445http://www.cnblogs.com/bavariam ...
相关推荐
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
xUtils支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响; xUtils 最低兼容Android 4.0 (api level 14); xUtils3变化较多所以建立了新的项目...
xUtils 支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUtils 最低兼容Android 4.0 (api level 14) xUtils3变化较多所以建立了新的...
xUtils 支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUtils 最低兼容Android 4.0 (api level 14). (Android 2.3?) xUtils3变化较多...
2. http(s) :基于UrlConnection,Android4.4之后可以为okHttp实现。 请求协议支持11种谓词:GET,POST,PUT,PATCH,HEAD,MOVE,COPY,DELETE,OPTIONS,TRACE,CONNECT 支持超大文件(超过2G)上传 支持断点下载...
xUtils 支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUtils 最低兼容Android 4.0 (api level 14). (Android 2.3?) xUtils3变化较多...
* xUtils 支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... * xUtils 最低兼容Android 4.0 (api level 14). ([Android 2.3?]...
* xUtils 支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... * xUtils 最低兼容Android 4.0 (api level 14). ([Android 2.3?]...