【轉】php經過curl跨域向asp.net服務器上傳文件及參數

轉:http://blog.sina.com.cn/s/blog_13331dce50102vq32.htmlphp

 

這是一個由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;就這樣問題終於解決...........................
相關文章
相關標籤/搜索