这是一个由php经过调用asp.net接口向asp.net服务器post上传文件及参数并根据返回值判断上传结果的问题开始的,当第一次接到这个问题时很快的想到了解决办法:
1. 先经过html页面的form表单将图片及参数上传到php页面,在php页面将接到的数据经过curl_post的传值方法传到做用域并获得返回值。
很快的,根据思路写好了代码,遗憾的是最终结果并不理想,图片每次都是提示上传失败。无奈之下只能换个方法。
2. 将html页面中form表单的action写为接口地址,
直接向接口中提交数据。
使人欣慰的是这种方法能够用,可是如何获取到返回的数据呢,而且不跳转页面呢?我想到了iframe
3. 在form表单中添加 target 属性 属性值为 iframe标签的name值 ,使提交表单时在iframe中执行,而不跳转页面。同时经过 js $(document.getElementByIdx_x('b').contentWindow.document.body).html() 获取到iframe中提交表单后获得的值 。
但仍是失败了 , 缘由是个人php环境.net的环境是两个独立的域名没法完成。js因为 w3c 安全标准 没法跨域读取。期间我还想到了ajaxFileUpload方法 但结果同样 没法突破 js 的局限性 。最后回到原点,开始查找curl不能上传的缘由:
4. 我首先在同一个域名下建立了a.php 和 b.php 两个文件 在a.php中将参数和文件经过curl 传向b.php。 在b.php中 打印出 $_FILES的值
string(263) "array(1) { |
|
["image"]=> |
|
array(5) { |
|
["name"]=> |
|
string(9) "aaaa.jpeg" |
|
["type"]=> |
|
string(24) "application/octet-stream" |
|
["tmp_name"]=> |
|
string(26) "C:\WINDOWS\temp\php38B.tmp" |
|
["error"]=> |
|
int(0) |
|
["size"]=> |
|
int(421230) |
|
} |
|
} |
|
["type"]=> string(24) "application/octet-stream" 这是什么卵 原来的 image/jpeg去哪了 查找资料终于找到解决方法 在传向curl 的数组中的 image路径后面 加上 type=type=image/png;就这样问题终于解决...........................