该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

public class HttpRequester {

/**

* 直接通过HTTP 协议提交数据到服务器,实现如下面表单提交功能:

*

ACTION="http://192.168.0.200:8080/ssi/fileload/test.do" enctype="multipart/form-data">

* @param actionUrl 上传路径(注:避免使用localhost 或127.0.0.1这样的路径

测试, 因为它会指向手机模拟器, 你可以使用http://www.itcast.cn 或

http://192.168.1.10:8080这样的路径测试)

* @param params 请求参数key 为参数名,value 为参数值

* @param file 上传文件

*/

public static String post(String actionUrl, Map params, FormFile[]

files) {

try {

String BOUNDARY = "---------7d4a6d158c9"; //数据分隔线

String MULTIPART_FORM_DATA = "multipart/form-data";

URL url = new URL(actionUrl);

HttpURLConnection conn = (HttpURLConnection)

url.openConnection();

conn.setConnectTimeout(5* 1000);

conn.setDoInput(true);//允许输入

conn.setDoOutput(true);//允许输出

conn.setUseCaches(false);//不使用Cache

conn.setRequestMethod("POST");

conn.setRequestProperty("Connection", "Keep-Alive");

conn.setRequestProperty("Charset", "UTF-8");

conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA

+ "; boundary=" + BOUNDARY);

StringBuilder sb = new StringBuilder();

for (Map.Entry entry : params.entrySet()) {//构建表单

字段内容

sb.append("--");

sb.append(BOUNDARY);

sb.append("\r\n");

sb.append("Content-Disposition: form-data; name=\""+

entry.getKey() + "\"\r\n\r\n");

sb.append(entry.getValue());

sb.append("\r\n");

}

DataOutputStream outStream = new

DataOutputStream(conn.getOutputStream());

outStream.write(sb.toString().getBytes());//发送表单字段数据

for(FormFile file : files){//发送文件数据

StringBuilder split = new StringBuilder();

split.append("--");

split.append(BOUNDARY);

split.append("\r\n");

split.append("Content-Disposition: form-data;name=\""+

file.getFormname()+"\";filename=\""+ file.getFilname() + "\"\r\n");

split.append("Content-Type: "+ file.getContentType()+"\r\n\r\n");

outStream.write(split.toString().getBytes());

if(file.getInStream()!=null){

byte[] buffer = new byte[1024];

int len = 0;

while((len = file.getInStream().read(buffer))!=-1){

outStream.write(buffer, 0, len);

}

file.getInStream().close();

}else{

outStream.write(file.getData(), 0, file.getData().length);

}

outStream.write("\r\n".getBytes());

}

byte[] end_data = ("--" + BOUNDARY + "--\r\n").getBytes();//数据结

束标志

outStream.write(end_data);

outStream.flush();

int cah = conn.getResponseCode();

if (cah != 200) throw new RuntimeException("请求url 失败");

InputStream is = conn.getInputStream();

int ch;

StringBuilder b = new StringBuilder();

while( (ch = is.read()) != -1 ){

b.append((char)ch);

}

outStream.close();

conn.disconnect();

return b.toString();

} catch (Exception e) {

throw new RuntimeException(e);

}

}

/**

* 提交数据到服务器

* @param actionUrl 上传路径(注:避免使用localhost 或127.0.0.1这样的路径

测试, 因为它会指向手机模拟器, 你可以使用http://www.itcast.cn 或

http://192.168.1.10:8080这样的路径测试)

* @param params 请求参数key 为参数名,value 为参数值

* @param file 上传文件

*/

public static String post(String actionUrl, Map params, FormFile

file) {

return post(actionUrl, params, new FormFile[]{file});

}

public static byte[] postFromHttpClient(String path, Map params,

String encode) throws Exception{

List formparams = new ArrayList();// 用

于存放请求参数

for(Map.Entry entry : params.entrySet()){

formparams.add(new BasicNameValuePair(entry.getKey(),

entry.getValue()));

}

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams,

"UTF-8");

HttpPost httppost = new HttpPost(path);

httppost.setEntity(entity);

HttpClient httpclient = new DefaultHttpClient();//看作是浏览器

HttpResponse response = httpclient.execute(httppost);//发送post 请求

return StreamTool.readInputStream(response.getEntity().getContent());

}

/**

* 发送请求

* @param path 请求路径

* @param params 请求参数key 为参数名称value 为参数值

* @param encode 请求参数的编码

*/

public static byte[] post(String path, Map params, String encode)

throws Exception{

//String params = "method=save&name="+ URLEncoder.encode(" 老毕",

"UTF-8")+ "&age=28&";//需要发送的参数

StringBuilder parambuilder = new StringBuilder("");

if(params!=null && !params.isEmpty()){

for(Map.Entry entry : params.entrySet()){

parambuilder.append(entry.getKey()).append("=")

.append(URLEncoder.encode(entry.getValue(),

encode)).append("&");

}

parambuilder.deleteCharAt(parambuilder.length()-1);

}

byte[] data = parambuilder.toString().getBytes();

URL url = new URL(path);

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

conn.setDoOutput(true);//允许对外发送请求参数

conn.setUseCaches(false);//不进行缓存

conn.setConnectTimeout(5 * 1000);

conn.setRequestMethod("POST");

android上传字符串到服务器,【图片】【转】通过Android 客户端上传数据到服务器【aide吧】_百度贴吧...相关推荐

  1. java读取服务器图片大小,SpringMVC中MultipartFile上传获取图片的宽度和高度详解

    SpringMVC一般使用MultipartFile来做文件的上传,通过MultipartFile的getContentType()方法判定文件的类型(MIME) ".doc":& ...

  2. android+多处理器+ios,Fotor - 全能图片处理器 #iOS #Android

    原标题:Fotor - 全能图片处理器 #iOS #Android 对于很多人来说,照片是社交生活不可割舍的一部分,比起文字来,照片让人们的视觉感受更丰富,因此,一张好照片的诞生就显得很有必要了.好的 ...

  3. 服务器添加广告信息服务,在客户端上插入广告

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 在客户端上插入广告 0 ...

  4. 服务器如何区分多个客户端的信息,如何从服务器向客户端发送已连接客户端的列表,以区分常规消息?...

    如果使用纯字节和字符串消息,则很难派生消息传递协议.您最好创建一个模型-类似 public class NetMessage{ public int MessageType{get;set;} pub ...

  5. linux服务器 图片压缩,Pngquant:Linux上压缩PNG图像的命令行实用工具

    [51CTO.com快译]Pngquant是一款免费开源的跨平台命令行有损PNG压缩工具.它基于可移植的libimagequant库,用C99编写.可通过将PNG图像转换成更高效的8位PNG格式来显著 ...

  6. Android中拍照完就给图片加水印,Android调用相机拍照并添加水印

    最近项目提出新需求,要求在拍照后在图片上添加用户信息的水印,so,楼主重新整理封装了一个简单的拍照+水印的工具类,需求不同,仅供参考.文件操作及权限做了适配,支持androidN及以上版本,放心使用. ...

  7. 新性能服务器图片介绍,G5型图形加速增强型弹性云服务器规格及功能介绍

    G5型弹性云服务器使用NVIDIA Tesla V100 GPU显卡,能够支持DirectX.OpenGL.Vulkan接口,提供16GB显存规格,支持最大4096*2160分辨率,满足专业级的图形处 ...

  8. android开发avg游戏,【图片】谈谈AVG游戏的Android移植(NScripter与吉里吉里)(转)【ons安卓吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public void getTagHandlers() { // s // 停止执行脚本 tagHandlersMap.put("s" ...

  9. 传奇服务器怎么修改升级武器成功,【图片】升级武器的经验【传奇百区吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一直想了很久,到底该不该发这贴.最后还是来嘚瑟下.先声明,我不是吹嘘,也不纯粹的**,更不是卖装备的托.发这个升武器的经验帖也不是为了混贴吧经验,就是谈谈 ...

  10. 服务器图片(绝对地址) 客户端显示问题

    做个参考吧,跟之前的有个问题类似 HTML code <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...

最新文章

  1. 编译乱序(Compiler Reordering)
  2. 4、Power Query-智能汇总工作簿下的指定或所有工作表数据
  3. php中数组生成下拉选项,php数组生成html下拉列表的方法
  4. python settings模块导入不了_Django:无法导入“模块”。检查模块AppConfig.name是否正确 - python...
  5. tensorflow随笔——C++工程化
  6. word中填充效果锁定纵横比_操作基础知识Word文字编辑
  7. FreeTextBox备忘
  8. 字母c语言ascii码,c语言ascii码对照表
  9. java语法有哪些_java编程基础语法都有哪些
  10. ubuntu录制屏幕傻瓜操作 ubuntu screen capture
  11. python开根号函数的实现
  12. 我努力了18年,不是为了和你一起喝咖啡姐妹篇
  13. idea从零到精通目录导航
  14. amazon aws 亚马逊云服务概述
  15. 多线程专题之线程死锁原因之谜
  16. linux 触摸屏驱动分析
  17. linux内核中使用inet_ntop,linux网络编程之inet_pton和inet_ntop函数
  18. Oracle 从入门到精通系列 - 前言
  19. 使用ALTER USER命令修改用户的密码、密码过期,锁定,解锁
  20. 网络安全知识:什么是最小特权原则?

热门文章

  1. 设计模式(4)—— 简单工厂模式(Simple Factory,创建型)
  2. Oracle SQL Developer 调试存储过程步骤(Oracle)
  3. redis memcache 性能比较
  4. Kerberos KDC not reachable
  5. 如何使用Idea导入jar包
  6. Java之美[从菜鸟到高手演变]之Exception
  7. jdk生成keystore、tomcat配置https
  8. InfoPath 发布表单到SharePoint库报错
  9. IDEA的热部署配置
  10. 【Data guard】Switchover切换