
只需添加一些
FormBodyPart到您的
MultipartEntity。
您可以使用该
StringBody对象来提供值。
这是一个如何使用它的示例:
byte[] data = {10,10,10,10,10}; HttpClient httpClient = new DefaultHttpClient();HttpPost postRequest = new HttpPost("server url");ByteArrayBody bab = new ByteArrayBody(data, "image.jpg");MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);reqEntity.addPart("image", bab);FormBodyPart bodyPart=new FormBodyPart("formVariableName", new StringBody("formValiablevalue"));reqEntity.addPart(bodyPart);bodyPart=new FormBodyPart("formVariableName2", new StringBody("formValiablevalue2"));reqEntity.addPart(bodyPart);bodyPart=new FormBodyPart("formVariableName3", new StringBody("formValiablevalue3"));reqEntity.addPart(bodyPart); postRequest.setEntity(reqEntity);HttpResponse response = httpClient.execute(postRequest);BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));String line = null;while((line = in.readLine()) != null) { System.out.println(line);}这是PHP脚本的输出:
$_FILESArray( [image] => Array ( [name] => image.jpg [type] => application/octet-stream [tmp_name] => /tmp/php6UHywL [error] => 0 [size] => 5 ))$_POST:Array( [formVariableName] => formValiablevalue [formVariableName2] => formValiablevalue2 [formVariableName3] => formValiablevalue3)
这并不会压缩一个内容主体部分内部的所有post var,但可以完成这项工作。
您无法从php:// stdin或$
HTTP_RAW_POST_DATA访问数据,这两种数据均不适用于multipart / form-data编码。从PHP文档:
php:// input是一个只读流,它允许您从请求正文中读取原始数据。对于POST请求,最好使用php:// input而不是$
HTTP_RAW_POST_DATA,因为它不依赖于特殊的php.ini指令。此外,对于默认情况下不填充$
HTTP_RAW_POST_DATA的那些情况,它是激活always_populate_raw_post_data的一种潜在的内存密集型替代方法。php://
input不适用于enctype =“ multipart / form-data”。
即使
always_populate_raw_post_data将其设置为“开”,它也无法解决问题:
始终填充包含原始POST数据的$
HTTP_RAW_POST_DATA。否则,仅使用无法识别的MIME类型数据填充变量。但是,访问原始POST数据的首选方法是php:// input。$
HTTP_RAW_POST_DATA不适用于enctype =“ multipart / form-data”。
我最好的猜测是将所有数据都添加为
ByteArrayBody或,
StringBody然后就好像从php://
stdin中读取数据一样使用它
这是一个示例
ByteArrayBody:
String testString="b=a&c=a&d=a&Send=Send";reqEntity.addPart(new FormBodyPart("formVariables", new ByteArrayBody(testString.getBytes(), "application/x-www-form-urlenpred", "formVariables")));在PHP中:
var_dump(file_get_contents($_FILES['formVariables']['tmp_name']));
您应该得到:
字符串(21)“ b = a&c = a&d = a&Send =发送”
编辑:经过一番思考,我认为最好使用一个
StringBody并将所有数据放入一个post变量中,然后从中进行解析,因为临时文件已完全删除,它会跳过将数据写入文件并在请求后将其删除无用的这会提高性能。这是一个例子:
String testString="b=a&c=a&d=a&Send=Send";bodyPart=new FormBodyPart("rawData", new StringBody(testString));reqEntity.addPart(bodyPart);然后从PHP:
var_dump($_POST['rawData']);
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)