- 浏览: 124666 次
- 性别:
- 来自: 深圳
最新评论
-
T_bag:
...
TabHost 中的Activity执行顺序 -
ihopethatwell:
楼主,你能否写一个 int类型的一维数组的结构体?
linux NDK实例 -
gf_crazy:
刚好找第二种,其他地方全是第一种。
TabHost -
gangbener:
我们是可以把不同分辨率的图片放到不同的图片文件夹中去,问题是: ...
android程序中屏幕问题解决方案 -
shusanzhan:
学习了,Mark
android应用收费渠道
post 附件
- 博客分类:
- Android
在做嘀咕客户端的时候,要实现拍照上传的功能。根据嘀咕api提供的接口,文档看上去很复杂,我用一个简单html文件来说明问题。 几个关键点: 这个表单使用post方法 有几个文本域,还用到file域,即文件上传 编码用utf-8 到底这个表单是怎么样的一种结构,它肯定是要根据http传输协议来构造出来的。我介绍一种非常直观的方法。利用FireFox的FireBug插件,我们在这个html表单上点击提交时候,可以看到这个请求到底是怎么样的。 明白了要做什么事情,接下来就是用java代码来构建这样的StringBuffer了。 下面给出代码
接下来,我在android中使用HttpURLConnection来构建一个符合这些规则的表单Post到服务器。/**
* 上传附件 (拍照)
* @param bitmap 待上传的Bitmap图
* @param fileKey 表单变量名
* @param urlstr 上传地址
* @param hmap 参数
* @param ctx context
* @return
*/
public static String postFileFromBitmap2(String urlstr, HashMap<String, String> hmap) {
dout("postURLContent:" + urlstr);
String fileKey = "image0";
String rs = "";
String temp = "temp.jpg";
Bitmap2File(bitmap, temp, U.ctx_for_getResString);
String exsistingFileName = U.ctx_for_getResString.getFilesDir() + "/" + temp;
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "---------------------------11538186919912";
try {
File f = new File(exsistingFileName);
FileInputStream fileInputStream = new FileInputStream(f);
if (!f.exists())
return rs;
URL url = new URL(urlstr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
//兼容嘀咕的用户账户密码信息必须通过 AUTH_HTTP 方式提供
if(hmap.containsKey("AUTH_HTTP_ENCODING")){
conn.setRequestProperty("Authorization", "Basic " + hmap.get("AUTH_HTTP_ENCODING"));
}
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"content\""+ lineEnd);
dos.writeBytes(lineEnd + URLEncoder.encode(""+hmap.get("content"), "UTF-8")+ lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"source\""+ lineEnd);
dos.writeBytes(lineEnd + URLEncoder.encode(""+hmap.get("source"), "UTF-8")+ lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"uploadImg\""+ lineEnd);
dos.writeBytes(lineEnd + URLEncoder.encode("xiexiezhichi", "UTF-8")+ lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"" + fileKey + "\";filename=\"" + exsistingFileName+ "\"" + lineEnd);
dos.writeBytes("Content-Type: image/jpeg"+lineEnd);
dos.writeBytes(lineEnd);
int bytesAvailable = fileInputStream.available();
byte[] buffer = new byte[bytesAvailable];
int bytesRead = fileInputStream.read(buffer, 0, bytesAvailable);
while (bytesRead > 0) {
dos.write(buffer, 0, bytesAvailable);
bytesAvailable = fileInputStream.available();
bytesRead = fileInputStream.read(buffer, 0, bytesAvailable);
}
dos.writeBytes(lineEnd);
dos.writeBytes(boundary + lineEnd);
fileInputStream.close();
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"image1\";filename=\"\"" + lineEnd);
dos.writeBytes("Content-Type: application/octet-stream"+lineEnd);
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"image2\";filename=\"\"" + lineEnd);
dos.writeBytes("Content-Type: application/octet-stream"+lineEnd);
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
dos.flush();
dos.close();
InputStream in = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
StringBuffer sb2 = new StringBuffer();
String tmp = null;
while ((tmp = br.readLine()) != null) {
sb2.append(tmp);
}
br.close();
in.close();
return sb2.toString();
} catch (IOException e) {
e.printStackTrace();
}
return rs;
}
发表评论
-
android.os.NetworkOnMainThreadException
2011-12-24 13:14 1232不能在android的主线程中,执行一个网络操作 ... -
转载:为什么要对URI进行编码
2011-12-15 15:49 1078为什么需要Url编码,通常如果一样东西需要编码,说明这样东 ... -
multipart form-data boundary
2011-12-15 15:23 1021含义 ENCTYPE="multipart/ ... -
android http 附件
2011-12-15 14:17 1659一:服务器端: 1:struts-config.xml ... -
让Android应用获取系统权限
2011-12-08 18:46 1002在 android 的API中有提供 SystemCloc ... -
Android源码目录结构详解
2011-12-01 20:22 847Android 2.1 |-- Makefile |-- ... -
两个activity跳转
2011-11-25 16:06 1277Activity A跳转到 Activity B /**A. ... -
线程同步之wait()/notify()的使用
2011-11-21 11:24 997wait()/notify() 通常,多 ... -
游戏中渲染线程与更新线程交替执行
2011-11-21 11:21 943private final State mThreadLock ... -
android colormatrix
2011-11-03 17:32 1496在编程中有时候需要 ... -
java栈,堆,池
2011-07-08 09:38 747今天复习了一下这些知识,顺便做了下笔记.1.寄存器:最快的存储 ... -
3D开发的境界
2011-06-04 20:12 704第一阶段:初学者阶 ... -
Http
2011-06-01 17:10 1310使用 HTTP 服务: 1. Apache HttpCline ... -
获取手机的Opengl的支持版本
2011-05-27 09:28 1463public int getGLVersion() { ... -
性能优化
2011-05-27 09:26 789如果你想写一个 Java 程序,观察某对象什么时候会被垃圾收集 ... -
Android游戏中其他语言数据类型之间的转换方法
2011-05-17 11:43 1233Java与其他语言数据类型之间的转换方法实例程序 /* ... -
android canvas.getClipBounds
2011-05-13 17:41 8438一种是传参数: Rect dstRect = new Re ... -
获取屏幕大小的方法
2011-05-13 17:38 600// one DisplayMetrics dm = n ... -
Android Lock 使用
2011-05-13 16:43 3204PowerManager 和PowerManager.Wa ... -
为Android编写实时游戏
2011-05-06 15:57 1310为Android编写实时游戏 —-学习笔记 这篇文章是 ...
相关推荐
C# HTTP POST 附件的方法,是源代码。
当我们谈论"C# .NET后台post上传文件"时,我们通常是指在Web应用中通过HTTP POST请求将文件从客户端(如浏览器)上传到服务器的过程。在这个场景中,特别是涉及到图片上传,可能的应用场景包括用户头像上传、产品...
在使用过程中,用户应确保从可信源获取软件,并遵循安全的最佳实践,如定期更新、不随意打开未知来源的附件,以免受到潜在的安全威胁。 总之,"POST提交工具增强版"为用户提供了更强大、更灵活的HTTP POST请求管理...
### C#用POST方式发送数据大小不受限制的方法 在C#开发中,通过POST方式发送数据是一种常见的网络请求处理方式。然而,在实际操作过程中,可能会遇到数据传输大小受限的问题,尤其是在向云服务器发送大型文件时更为...
- 设置Body:POST请求的主要内容,可以是JSON、XML或其他格式,同样可以使用动态参数。 4. 动态参数的使用:在Kettle中,可以使用变量(Variable)、环境变量(Environment variable)或字段(Field)作为动态参数...
3. **创建Ajax请求**:使用jQuery的`$.ajax()`或`$.post()`方法创建一个异步请求,将文件数据发送到服务器。 4. **服务器处理**:Lotus Domino服务器端接收文件,保存到数据库或其他存储介质,并返回处理结果。 5. *...
2:增加MailItem的AttachmentAdd事件 通过判断附件大小 小于 Mb 则保存在附件 大于 Mb则后台Post到Web或FTP服务器 并返回连接 4:将连接作为html 的超链接模式<A href "返回值">下载超大附件< A>...
大家都知道ajax是不能直接下载文件的,所以一般都是通过一个超链接的形式去下载一个文件 但是当牵扯到需要发送很多数据到服务器上再下载的时候超链接的形式就有些太过勉强了,如下是一个工具方法(依赖jquery) 可以...
POST请求用于向服务器发送大量数据,如表单数据或二进制数据,这些数据不会显示在URL中。POST请求的安全性相对更高,因为它不会将数据暴露在浏览器历史记录中。在C#中,你可以使用`HttpClient`的`PostAsync`方法来...
为了确保Mantis能够正常处理较大尺寸的附件,通常建议设置`post_max_size`的值大于等于`upload_max_filesize`的值。例如,在示例内容中提到的`post_max_size=8M`和`upload_max_filesize=2M`,即意味着可以通过...
2. POST:POST请求则用于向服务器发送数据,通常用于提交表单或者上传文件。POST请求的数据包含在请求体中,对数据量无明显限制,且数据对用户不可见。 在C#中,我们可以使用`System.Net.Http`命名空间中的...
本篇将重点解析标题为"这是我提问帖中的附件Post.rar"的压缩包,探讨RAR格式的特点以及如何处理RAR文件,特别是其中的Post.txt文件。 RAR是一种流行的压缩文件格式,由俄罗斯软件开发者Eugene Roshal开发。相比ZIP...
在这个场景中,我们将深入探讨如何利用libcurl在C++中上传文件并发送POST表单数据。 首先,`con_test.cpp`是主要的源代码文件,它包含了使用libcurl进行文件上传和POST操作的具体实现。`StdAfx.cpp`和`StdAfx.h`是...
在上传附件的情况下,请求体通常包含了文件内容。 1. **创建HTTP请求**: 可以使用`System.Net.HttpWebRequest`类来创建HTTP请求。首先,你需要实例化这个类,并设置其`RequestUri`属性为服务器的URL。例如: ```...
### 关于修改Roundcube Webmail上传附件的大小 在日常工作中,我们经常需要通过电子邮件发送文件,有时这些文件的大小超过了默认的限制,这就会导致发送失败或出现其他错误。对于使用Roundcube Webmail系统的用户而...
根据给定的文件信息,我们可以总结出以下关于C#后台请求接口的方法(GET, POST)的知识点: ### C#后台请求接口方法概述 在Web开发过程中,前后端之间的数据交互非常关键,通常会使用HTTP协议中的GET和POST两种...
附件说明:{$post['attachment'][$i]['attachcomment']} ``` 这段代码会在每个附件下方显示已有的附件说明,如果用户未填写,则不显示。为了允许用户添加新的说明,我们需要在附件上传或编辑时提供一个输入字段。...
首先,我们需要了解的是POP3(Post Office Protocol version 3)协议,它是用于从邮件服务器检索电子邮件的标准协议。在C#中,我们可以使用`System.Net.Mail`命名空间中的`Pop3`类来与POP3服务器进行交互。`Pop3`类...
在Asp.Net MVC框架中,使用jQuery Form插件进行附件上传是一种常见的实践,它能够提供异步、非刷新的用户体验。jQuery Form插件是jQuery库的一个扩展,它使得表单提交变得更加灵活和易于控制,特别是在处理文件上传...