本文实例讲述了Android使用post方式上传图片到服务器的方法。分享给大家供大家参考,具体如下:

/**

* 上传文件到服务器类

*

* @author tom

*/

public class UploadUtil {

private static final String TAG = "uploadFile";

private static final int TIME_OUT = 10 * 1000; // 超时时间

private static final String CHARSET = "utf-8"; // 设置编码

/**

* Android上传文件到服务端

*

* @param file 需要上传的文件

* @param RequestURL 请求的rul

* @return 返回响应的内容

*/

public static String uploadFile(File file, String RequestURL) {

String result = null;

String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成

String PREFIX = "--", LINE_END = "\r\n";

String CONTENT_TYPE = "multipart/form-data"; // 内容类型

try {

URL url = new URL(RequestURL);

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

conn.setReadTimeout(TIME_OUT);

conn.setConnectTimeout(TIME_OUT);

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

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

conn.setUseCaches(false); // 不允许使用缓存

conn.setRequestMethod("POST"); // 请求方式

conn.setRequestProperty("Charset", CHARSET); // 设置编码

conn.setRequestProperty("connection", "keep-alive");

conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);

if (file != null) {

/**

* 当文件不为空,把文件包装并且上传

*/

DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

StringBuffer sb = new StringBuffer();

sb.append(PREFIX);

sb.append(BOUNDARY);

sb.append(LINE_END);

/**

* 这里重点注意: name里面的值为服务端需要key 只有这个key 才可以得到对应的文件

* filename是文件的名字,包含后缀名的 比如:abc.png

*/

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

+ file.getName() + "\"" + LINE_END);

sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END);

sb.append(LINE_END);

dos.write(sb.toString().getBytes());

InputStream is = new FileInputStream(file);

byte[] bytes = new byte[1024];

int len = 0;

while ((len = is.read(bytes)) != -1) {

dos.write(bytes, 0, len);

}

is.close();

dos.write(LINE_END.getBytes());

byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes();

dos.write(end_data);

dos.flush();

/**

* 获取响应码 200=成功 当响应成功,获取响应的流

*/

int res = conn.getResponseCode();

Log.e(TAG, "response code:" + res);

// if(res==200)

// {

Log.e(TAG, "request success");

InputStream input = conn.getInputStream();

StringBuffer sb1 = new StringBuffer();

int ss;

while ((ss = input.read()) != -1) {

sb1.append((char) ss);

}

result = sb1.toString();

Log.e(TAG, "result : " + result);

// }

// else{

// Log.e(TAG, "request error");

// }

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return result;

}

/**

* 通过拼接的方式构造请求内容,实现参数传输以及文件传输

*

* @param url Service net address

* @param params text content

* @param files pictures

* @return String result of Service response

* @throws IOException

*/

public static String post(String url, Map params, Map files)

throws IOException {

String BOUNDARY = java.util.UUID.randomUUID().toString();

String PREFIX = "--", LINEND = "\r\n";

String MULTIPART_FROM_DATA = "multipart/form-data";

String CHARSET = "UTF-8";

URL uri = new URL(url);

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

conn.setReadTimeout(10 * 1000); // 缓存的最长时间

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

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

conn.setUseCaches(false); // 不允许使用缓存

conn.setRequestMethod("POST");

conn.setRequestProperty("connection", "keep-alive");

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

conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);

// 首先组拼文本类型的参数

StringBuilder sb = new StringBuilder();

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

sb.append(PREFIX);

sb.append(BOUNDARY);

sb.append(LINEND);

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

sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);

sb.append("Content-Transfer-Encoding: 8bit" + LINEND);

sb.append(LINEND);

sb.append(entry.getValue());

sb.append(LINEND);

}

DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());

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

// 发送文件数据

if (files != null)

for (Map.Entry file : files.entrySet()) {

StringBuilder sb1 = new StringBuilder();

sb1.append(PREFIX);

sb1.append(BOUNDARY);

sb1.append(LINEND);

sb1.append("Content-Disposition: form-data; name=\"uploadfile\"; filename=\""

+ file.getValue().getName() + "\"" + LINEND);

sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);

sb1.append(LINEND);

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

InputStream is = new FileInputStream(file.getValue());

byte[] buffer = new byte[1024];

int len = 0;

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

outStream.write(buffer, 0, len);

}

is.close();

outStream.write(LINEND.getBytes());

}

// 请求结束标志

byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();

outStream.write(end_data);

outStream.flush();

// 得到响应码

int res = conn.getResponseCode();

InputStream in = conn.getInputStream();

StringBuilder sb2 = new StringBuilder();

if (res == 200) {

int ch;

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

sb2.append((char) ch);

}

}

outStream.close();

conn.disconnect();

return sb2.toString();

}

}

示例调用第二种方式上传:

final Map params = new HashMap();

params.put("send_userId", String.valueOf(id));

params.put("send_email", address);

params.put("send_name", name);

params.put("receive_email", emails);

final Map files = new HashMap();

files.put("uploadfile", file);

final String request = UploadUtil.post(requestURL, params, files);

希望本文所述对大家Android程序设计有所帮助。

android用上传图片到服务器上,Android使用post方式上传图片到服务器的方法相关推荐

  1. 电脑文件如何传到云服务器上,电脑文件如何传到云服务器上

    电脑文件如何传到云服务器上 内容精选 换一换 DNS服务器用于解析弹性文件服务中文件系统的域名.DNS服务器东北区IP地址为100.125.6.250,其它区域详情请参见华为云内网DNS地址.默认情况 ...

  2. 服务器多系统ssd寿命检测,多品牌服务器上SSD磁盘寿命的批量统计与监控方法

    1.多品牌服务器上SSD磁盘寿命的批量统计与监控方法,其特征在于:包括以下步骤: (1).判断磁盘是否支持S.M.A.R.T协议,对于支持S.M.A.R.T协议的磁盘,在服务器上使用lspci判断是否 ...

  3. 华为服务器上传文件,服务器上传文件的方式

    服务器上传文件的方式 内容精选 换一换 外部镜像文件在从原平台导出前,没有按照"Windows操作系统的镜像文件限制"的要求完成初始化操作,推荐您使用弹性云服务器完成相关配置.流程 ...

  4. linux ftp 550 下载,linux ftp服务器上传文件夹时提示550错误问题解决方法

    linux ftp服务器上传文件夹时提示550错误问题解决方法 标签: linux ftp服务器 550 中文文件夹上传错误 问题 分类: 计算机 2010-11-06 22:47 前几天在实验室搭配 ...

  5. mfc 获得服务器文件信息,VC编程之VC 读取服务器上的文件(HTTP方式)

    本文主要向大家介绍了VC编程之VC 读取服务器上的文件(HTTP方式),通过具体的内容向大家展示,希望对大家学习VC编程有所帮助. CString GetStringFromUrl(LPCTSTR p ...

  6. IIS服务器上设置404的方式

    设置网站404页面后,通过站长工具中的http状态查询链接,发现返回的状态码为200,在SEO领域内这是不允许,而且危害很大. 原来之前在IIS服务器上设置404的方式错了,正确的方式: 注意404. ...

  7. android上传本地图片到服务器上,Android使用post方式上传图片到服务器的方法

    本文实例讲述了Android使用post方式上传图片到服务器的方法.分享给大家供大家参考,具体如下: /** * 上传文件到服务器类 * * @author tom */ public class U ...

  8. android项目中使用的服务器上,android 开发中使用okhttp上传文件到服务器

    开发android手机客户端,常常会需要上传文件到服务器,比如:你手机里的照片. 使用okhttp会是一个很好的选择.它使用很简单,而且运行效率也很高. 首先,在 app/build.gradle 的 ...

  9. asp+Access程序在Windows Server 2003 Enterprise Edition服务器上运行时无法显示备注字段的解决方法...

    最近公司让软件公司开发了一个网站,使用asp+Access,可是软件公司上传到服务器上后页面无法显示数据库中的备注字段的内容,给软件公司打电话,那边的开发人员说: 问题:服务器上asp无法直接显示Ac ...

最新文章

  1. 微信小程序WebSocket实现聊天对话功能完整源码
  2. Java library util_sdejavautil.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
  3. STM32开发 -- Ublox GPS之设置PUBX
  4. svn服务端开启某个目录的服务
  5. 可访问范围 与 visual 或 abstract “修饰符”
  6. 装饰工程预结算教程电子书_东北分公司举行工程预结算实战技能培训
  7. datagrid 的标题的内容不对应整齐
  8. CentOS7.5 Linux搭建全文检索--Solr7.4.0单机服务
  9. python numpy数组画图_python – Numpy和Pyplot的条件绘图
  10. 解决VMware虚拟机网络时长中断的问题
  11. [dhtmlxGantt]Milestone Mark-里程碑标识的交错显示
  12. ssis 计划任务_SSIS Web服务任务
  13. C++并发与多线程(五)互斥量,atomic、与线程池
  14. day_05 显示字符A
  15. 打开计算机页面闪,电脑打开网页闪烁几大原因及解决
  16. MQ消息队列的12点核心原理总结
  17. 怎样批量处理编辑图片?这3个方法你一定要会
  18. windows 离线安装nessus
  19. 记一次muse-ui 使用
  20. 深圳高中女生街头版someone like you

热门文章

  1. 【C语言】两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单,a说他不和x比,c说他不和x,z比,编写程序找出三对赛手名单。...
  2. C#开发笔记之13-如何用C#分隔字符串并返回字符串数组?
  3. C#LeetCode刷题之#111-二叉树的最小深度​​​​​​​(Minimum Depth of Binary Tree)
  4. delphi5开发人员指南_成为企业家并发挥作用的开发人员指南
  5. mongodb远程连接windows
  6. Matlab对图像进行鼠标取点操作及K值聚类分析
  7. python线程的互斥锁
  8. cpu 保存模式的内存访问向下兼容原理
  9. java web项目中的根路径踩坑
  10. 计算机文档我的文档丢失,恢复我的电脑窗口中共享文档与我的文档不见了的方法...