這是一個由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;就這樣問題終於解決...........................