2017-09-18 8 views
1

私はformdataでファイルをアップロードしようとしています。ファイルだけで動作しますが、私はいくつかのユーザーデータをアップロードする必要があります。私はformdataを追加しようとしましたが、ajaxによって呼び出されたphpファイルの配列($ _ FILES)を "print_r"とするとそこには表示されません。フォームデータ付きマルチパートファイルアップロード

誰かが問題の解決策を持っている場合、またはユーザーデータを使用してファイルアップロードに取り組むためのより良い方法がある場合は、教えてください。

PHP:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 
<link href="style.css" rel="stylesheet" type="text/css"> 
<script src="jquery-1.12.0.min.js"></script> 


</head> 
<body> 
<div class="container"> 
    <h1>AJAX File upload</h1> 

    <form method="post" action="" enctype="multipart/form-data" id="myform"> 
     <input type="text" id="test" value="sample"> 
     <div > 
      <img src="" id="img" width="100" height="100"> 
     </div> 
     <div > 
      <input type="file" id="file" name="file" /> 
      <input type="button" class="button" value="Upload" id="but_upload"> 
     </div> 
    </form> 
</div> 
</body> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $("#but_upload").click(function(){ 
     //console.log("piemel"); 
     console.log(document.getElementById('test').value); 
     var fd = new FormData(); 
     var files = $('#file')[0].files[0]; 
     fd.append('test', document.getElementById('test').value); 
     fd.append('file',files); 
     console.log(fd); 

     $.ajax({ 
      url:'upload.php', 
      type:'post', 
      data:fd, 
      contentType: false, 
      processData: false, 
      success:function(response){ 
       if(response != 0){ 
        $("#img").attr("src",response); 
       } 
      }, 
      error:function(response){ 
       alert('error : ' + JSON.stringify(response)); 
      } 
     }); 
    }); 
}); 


</script> 
</html> 

Ajaxのファイル:あなたが使用したコードを見ることができます

あなたがポストを使用してデータを送信しているよう

<?php 

/* Getting file name */ 

$filename = $_FILES['file']['name']; 

/* Location */ 
$location = "upload/".$filename; 

/* Upload file */ 
if(move_uploaded_file($_FILES['file']['tmp_name'],$location)){ 
    echo $location; 
}else{ 
    echo 0; 
} 

答えて

1

私は、この(私もこの問題に直面し、このスクリプトを作成しました)

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

if(isset($_FILES["userImage"]["type"])) 
{ 
    $validextensions = array("jpeg", "jpg", "png"); 
    $temporary = explode(".", $_FILES["userImage"]["name"]); 
    $file_extension = end($temporary); 

    $file_type = $_FILES["userImage"]["type"]; 

    if ((($file_type == "image/png") || ($file_type == "image/jpg") || ($file_type == "image/jpeg") 
    ) /*&& ($_FILES["file"]["size"] < 100000)*/ //Approx. 100kb files can be uploaded. 
    && in_array($file_extension, $validextensions)) 
    { 
     if ($_FILES["userImage"]["error"] > 0) 
     { 
      echo "Return Code: " . $_FILES["userImage"]["error"] . "<br/><br/>"; 
     } 
     else 
     { 
      if (file_exists("uploads/" . $_FILES["userImage"]["name"] . '-'.time())) 
      { 
       echo $_FILES["userImage"]["name"] . time() ." <span id='invalid'><b>already exists.</b></span> "; 
      } 
      else 
      { 
       $sourcePath = $_FILES['userImage']['tmp_name']; // Storing source path of the file in a variable 
       $targetPath = "uploads/".$_FILES['userImage']['name'].'-'.time(); // Target path where file is to be stored 

       //check the writable permissions 

       /*if (is_writeable('uploads/' . $_FILES['userImage']['name'])) { 
        die("Cannot write to destination file"); 
       }*/ 

       if(move_uploaded_file($sourcePath,$targetPath)) { 

        echo "<span id='success'>Image Uploaded Successfully...!!</span><br/>"; 
        echo "<br/><b>File Name:</b> " . $_FILES["userImage"]["name"] . "<br>"; 
        echo "<b>Type:</b> " . $_FILES["userImage"]["type"] . "<br>"; 
        echo "<b>Size:</b> " . ($_FILES["userImage"]["size"]/1024) . " kB<br>"; 
        echo "<b>Temp file:</b> " . $_FILES["userImage"]["tmp_name"] . "<br>"; 

       } else { 

        echo "<pre>"; print_r($_FILES['file']['error']); echo "</pre>"; 
       } 
      } 
     } 
    } 
    else 
    { 
    echo "<span id='invalid'>***Invalid file Size or Type***<span>"; 
    } 
} 
?> 

upload.php

のindex.php

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 

<form id="uploadForm" action="upload.php" method="post"> 
<label>Upload Image File:</label><br/> 
<input name="userImage" type="file" class="inputFile" /> 
<input type='text' name="my_name" value="harish"> 
<input type="submit" value="Submit" class="btnSubmit" /> 
</form> 

<script type="text/javascript"> 

$(document).ready(function (e) { 

    $("#uploadForm").on('submit',(function(e) { 

    e.preventDefault(); 

    $.ajax({ 

      url: "upload.php", 
      type: "POST", 
      data: new FormData(this), 
      contentType: false, 
      cache: false, 
      processData:false, 

      success: function(data){ 
       $("#targetLayer").html(data); 
      }, 
      error: function(){}    
     }); 

    })); 

}); 

</script> 

*同じレベルや変化にフォルダアップロードを作成します。アップロードパスに書き込み可能な権限を与えてください。

このスクリプトはデータとファイルの両方で動作します。ポストデータの場合は、$ _POST ['post_input']を使用する必要があります。

このスクリプトを行ってください。あなたに役立つことを願ってください。

+0

これは私のニーズに完全に対応しています。私は$ file_extension = end($ temporary)だけを変更しました。 $ file_extension = strtolower(end($ temporary))に変更します。 –

1

$_FILESは、データ用のファイルではないためであります$_POST

0

hm。大きなファイルをアップロードしようとしていますか?私が$ _FILESを使いこなしていたときに、20MB以上のファイルをアップロードするのは失敗しました。私がIISで邪魔することなくアップロードできるのは、通常の画像だけでした。

あなたが提供した場所に一時ファイルを置く必要があるので、あなたのコードは間違っているようです。あなたは正確に何をアップロードしようとしていますか?あなたのコードで使用しているフォルダ "upload"は存在しますか?フォルダが存在しない場合はファイルを移動しません

関連する問題