String filepath = "/storage/sdcard0/ShareSDK/cn.sharesdk.demo/cache/pic_glance_back.jpg"; /** * 上传图片 * * @param urlStr 上传服务器地址 * @param textMap * @param fileMap * @return */ public String formUpload(String urlStr, Map<String, String> textMap, Map<String, String> fileMap) { String res = ""; HttpURLConnection conn = null; String BOUNDARY = "---------------------------123821742118716"; //boundary就是request头和上传文件内容的分隔符 try { URL url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setReadTimeout(30000); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn .setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)"); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); OutputStream out = new DataOutputStream(conn.getOutputStream()); // text if (textMap != null) { StringBuffer strBuf = new StringBuffer(); Iterator iter = textMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String inputName = (String) entry.getKey(); String inputValue = (String) entry.getValue(); if (inputValue == null) { continue; } strBuf.append("\r\n").append("--").append(BOUNDARY).append( "\r\n"); strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n"); strBuf.append(inputValue); } out.write(strBuf.toString().getBytes()); } // file if (fileMap != null) { Iterator iter = fileMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String inputName = (String) entry.getKey(); String inputValue = (String) entry.getValue(); if (inputValue == null) { continue; } File file = new File(inputValue); String filename = file.getName(); // String contentType = new MimetypesFileTypeMap() // .getContentType(file); String contentType = getContentType(inputValue); if (filename.endsWith(".png")) { contentType = "image/png"; } if (contentType == null || contentType.equals("")) { contentType = "application/octet-stream"; } StringBuffer strBuf = new StringBuffer(); strBuf.append("\r\n").append("--").append(BOUNDARY).append( "\r\n"); strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + filename + "\"\r\n"); strBuf.append("Content-Type:" + contentType + "\r\n\r\n"); out.write(strBuf.toString().getBytes()); DataInputStream in = new DataInputStream( new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } in.close(); } } byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes(); out.write(endData); out.flush(); out.close(); // 读取返回数据 StringBuffer strBuf = new StringBuffer(); BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { strBuf.append(line).append("\n"); } res = strBuf.toString(); reader.close(); reader = null; } catch (Exception e) { System.out.println("发送POST请求出错。" + urlStr); e.printStackTrace(); } finally { if (conn != null) { conn.disconnect(); conn = null; } } return res; } /** * 获取文件类型 * @param path * @return */ private String getContentType(String path) { File file = new File(path); String type = null; try { type = file.toURL().openConnection().getContentType(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return type; }
使用:
Map<String, String> textMap = new HashMap<String, String>(); textMap.put("name", "testname"); Map<String, String> fileMap = new HashMap<String, String>(); fileMap.put("userfile", filepath); String ret = formUpload(ContactCons.URL_GET_UPLOAD_PHOTO_URL, textMap, fileMap); Log.d("", ret);
相关推荐
总的来说,原生的HTTP POST上传虽然没有第三方库那么方便,但具有更好的控制力和更低的依赖性,适合对性能有较高要求或对第三方库有特殊限制的项目。在实际应用中,应根据项目需求选择合适的实现方式。
本文将详细介绍如何在C语言环境中实现HTTP POST请求、文件的上传与下载以及JSON数据的解析。 首先,让我们关注"HTTP POST"。POST请求是HTTP协议中的一个方法,用于向服务器发送数据,通常用于提交表单或上传文件。...
在Qt框架中,进行HTTP POST请求来上传图片到服务器主要有两种常见的方式:Base64编码流和直接上传文件。这两种方法各有优缺点,适用于不同的场景。下面将详细讲解这两种方式的实现过程及其特点。 首先,我们来看...
总结,使用易语言实现POST百度上传图片涉及到对HTTP协议的理解,易语言编程基础,网络请求的构建,以及错误处理和调试技能。掌握这些知识点,不仅可以完成图片上传任务,也为其他类似网络操作提供了基础。对于初学者...
本知识点聚焦于使用易语言进行POST方式的图片上传操作,这是一种常见的网络数据传输方法,尤其在网页表单提交、文件上传等场景中广泛应用。 在Web开发中,POST请求常用于向服务器发送数据,包括文本、图片等各种...
在IT行业中,HTTP POST方式是常见的一种数据提交方式,尤其在文件上传场景中。C#作为.NET框架的主要编程语言,提供了强大的支持来实现这个功能。本文将深入探讨如何使用C#进行HTTP POST方式的文件上传,并关注一些...
本主题聚焦于使用C语言实现HTTP POST方法上传文件和发送JSON数据,这对于开发嵌入式系统、移动应用后端或者任何需要轻量级网络交互的项目来说尤其有用。 HTTP POST方法通常用于向服务器发送数据,比如用户填写的...
在本场景中,我们关注的是"httpClient post 上传图片"以及"下载图片"的操作。下面将详细介绍如何使用HttpClient进行图片的上传和下载,并探讨如何修改上传和下载的URI。 1. **HttpClient上传图片**: - 首先,我们...
在本文中,我们将深入探讨如何在VC++ MFC环境下构建一个HTTP协议数据的POST上传图片类,同时模拟表单提交。这个过程涉及到的关键技术包括HTTP POST请求、编码转换以及MFC类库的使用。 首先,我们需要理解HTTP POST...
在Web开发中,"跨域post上传图片"是一项常见的需求,尤其在用户需要在网站上上传个人头像或分享照片时。"跨域"是指一个域下的文档或脚本尝试请求另一个域下的资源,由于浏览器的同源策略限制,这种行为通常会被禁止...
本文将详细讲解如何在Unity中利用HTTP请求上传图片到服务器,这里以Tomcat服务器为例。 首先,Unity提供了UnityWebRequest(UWR)类来处理HTTP请求,它是Unity 5.5版本后引入的,用于替换过时的WWW类。UWR支持异步...
在本实例中,我们将探讨如何使用QT通过HTTP协议来实现图片的实时上传、下载及显示。这涉及到QT中的网络模块,包括QNetworkAccessManager、QNetworkRequest、QNetworkReply等关键类。 首先,要实现图片的HTTP上传,...
在本教程中,我们将探讨如何利用libcurl库在C/C++程序中实现POST方法来提交表单数据并上传图片。这个过程涉及到几个关键步骤,包括初始化libcurl会话、设置请求选项、构建POST数据以及处理响应。 首先,你需要包含...
以上就是Android应用中从SD卡选择图片并使用HTTP POST上传的基本步骤。注意,在实际项目中,还需要处理网络错误、进度显示、上传状态回调等功能,以提供更好的用户体验。同时,为了兼容不同的Android版本,可能需要...
对于文件上传,我们通常会使用HTTP的POST方法。这个过程涉及以下几个步骤: 1. 创建套接字:使用socket()函数创建一个网络套接字。 2. 连接服务器:使用connect()函数连接到服务器的指定端口。 3. 构建HTTP请求:...
在iOS开发中,上传图片至服务器通常...总之,iOS通过HTTP POST上传图片涉及网络请求、数据编码、多部分表单数据的构建以及服务器响应的处理。通过理解这些概念和操作,开发者能够实现将图片安全地上传到服务器的功能。
以上就是关于"C# .NET后台post上传文件"这一主题的主要知识点,包括HTTP POST请求、ASP.NET MVC框架的应用、文件上传的前端和后端处理、图片处理、存储策略以及安全性和异常处理等方面。在实际开发中,这些知识点将...
HttpPost httpPost = new HttpPost("http://example.com/upload"); ``` 3. **MultipartEntityBuilder**:对于文件上传,我们通常使用多部分表单数据(Multipart Form Data)。这里需要用到`...
在C#编程中,模拟POST提交通常用于模拟用户在网页上的表单提交行为,...以上就是使用C#模拟POST提交上传图片到服务器的基本流程和关键知识点。实际应用中,可能需要根据具体的业务需求和服务器端的API进行相应的调整。