2016-05-07 30 views
2

AJAX経由で画像ファイルをアップロードできません。FormDataからサーバー上のデータを取得できません

ウェブ:

<div> 
    <form id="birdi_image_form"> 
     <input type="file" name="birdi_image" id="birdi_image" ></input> 
    </form> 

    <input type="text" name="species"></input> 
    <textarea name="comments"></textarea> 
</div> 
<div id="debug"></div> 

<script type="text/javascript"> 

jQuery(function($){ 
    $('#birdi_image').change(function(){ 
     var ima = new FormData($('#birdi_image_form')[0]); 

     $.ajax({ 
      url:"/bird/bird_scripts/fu.php", 
      type:"post", 
      data: ima, 
      processData: false, 
      dataType:"text", 
      success:function(data, textStatus, jqXHR) { 
       $('#debug').text(data); 
      } 
     }); 
    }); 
}); 

</script> 

/bird/bird_scripts/fu.php:

<?php 

$imagedir = '/images'; 
$tmpfname = tempnam($imagedir, "b_"); 

echo var_dump($_POST); 

if (move_uploaded_file($_FILES['birdi_image']['tmp_name'], $tmpfname)) { 
    echo "File is valid, and was successfully uploaded.\n"; 
} else { 
    echo "Upload failed"; 
} 

?> 

オンラインを中心に探してから、私は私の$_FILES変数の内容を見つけるために期待していたが、これは空です。この例のようにvarを画面にダンプすると、次のようになります。 $_POST['birdi_image']は私にNULLを与えます。

アレイ(68){[ "------ WebKitFormBoundaryYCAoI8shwgBavjJP コンテンツの廃棄:_formデータ; _name"] =>列(339) "" birdi_image "; ファイル名=" test.jpg "コンテンツタイプ:image/jpeg JFIFdd ExifMM bj(1r2 i [email protected]'B @ 'Adobe Photoshop CS2 Windows2008:06:24 11:11:48 b g " ["? Ci \ R Μꟑ ]T z "] =>文字列(82)" f z i���/��v��E~��[,�Y �s�������1l�G����-���߿�enu'=�v�z���=?Ҳ���" ["�{��<o��ӗ�M��ysnʨo87~;l���۔�"]=> string(172) "�<��t�2~���O�S �����t���㵺C�}E������}��I�d]c���y}#�����C,�Z��־��V��ynʿ��?�g�*����o��ٌ�.}�y����}��z����w^�]�m�u������z>�37�_C긵��K�Y-{��뺷��M���ul��Y�" ["c�yhHp����"]=> string(152) "��[-���1�]��|�����۽Q�\�e���o�~��g������u�.���A��t�]�3�W�ד��b���}>�����%��K���Ѳ�3���zX��qZ��}u��sc� ���N� ^-w�7���\r� ����c��=?՗δX�j" ["C�uw���-��"]=> string(57) "���m��w��������ѩ���������k��r����m�t�62rIk���m�ߗV��}" ["�"]=> string(384) "!�<��B���6*�c��劷Q���uF*��U��������ď,� y {R E% Q 5. IE N Ο ̿4〜R .. .............アップロードに失敗しました。

完全なフォーム送信を使用する前にファイルをアップロードしました。 AJAXでこれをやろうとしているのは初めてです。データがサーバーに届いているように見えますが、サーバー側からはそれを理解できないようです。あなたがコードで見ることができるように、私は$_FILES['birdi_image']が存在すると予想しましたが、それはありません。私は何か完全に間違っているのですか?あなたがfalseにコンテンツタイプを設定する必要が

おかげ

答えて

3

、そうでない場合はjQueryのはあなた

$.ajax({ 
     url:"/bird/bird_scripts/fu.php", 
     type:"post", 
     data: ima, 
     processData: false, 
     contentType: false, 
     dataType:"text", 
     success:function(data, textStatus, jqXHR) { 
      $('#debug').text(data); 
     } 
    }); 
+0

これは、ありがとうございました。 –

1

ため1(間違ったもの)を設定します私もこれで苦労 - それはちょうど同じくらい簡単ではありませんそのはず。私は最終的に正しいことをした男を見つけ、彼のコードを勉強しました。最後に

Ravi Kusuma's jQuery File Upload

クスマプラグインを書いたので、私はちょうど彼のコード/プラグインを使用。なぜホイールを再発明するのですか?彼はすべての問題を解決しました。アップロードされたファイルとともに余分なデータを送信することに至りました。

関連する問題