J'essaie de télécharger de l'image en utilisant ajax sur le changement de nom d'image du fichier, mais je ne peux pas obtenir $_FILES["InputUploadFileImage"]["tmp_name"];
Du côté du serveur, mon code.
Code JQuery
$('#InputUploadFileImage').change(function() { var FilePath = $('#InputUploadFileImage').val(); var FileSize = this.files[0].size; $.ajax({ type: "POST", async: true, dataType: "json", url: ajaxurl, data: ({ type: "POST", action: 'Ajax_ChangingProfileImage', FilePath: FilePath, FileSize: FileSize }), success: function (response) { if (response.Message === 'ImageSuccessfullyUploaded') { alert('Image Successfully Uploaded.'); $('#imgUserImage').image_src = FilePath; console.log(response.FilePath); } else { alert('Image was not uploaded successfully.'); $('#imgUserImage').image_src = FilePath; console.log(response.FilePath); } }, error: function (jqXHR, textStatus, errorThrown) { console.log(jqXHR); console.log(textStatus); console.log(errorThrown); } }); });
Code PHP
function Ajax_ChangingProfileImage() { $FileTmpPath = $_FILES["InputUploadFileImage"]["tmp_name"]; $FileSize = $_POST['FileSize']; $FilePath = $_SERVER['DOCUMENT_ROOT'] . "restronaut/wp-content/uploads/UsersImages/1.jpg"; $IsUploaded = move_uploaded_file($FileTmpPath ,$FilePath); if ($IsUploaded) { $response['Message'] = 'ImageSuccessfullyUploaded'; $response['FilePath'] = $FilePath; } else { $response['Message'] = 'ImageNotSuccessfullyUploaded'; $response['FilePath'] = $FilePath; } header('Content-Type: application/json'); echo json_encode($response); die(); }
S'il vous plaît, aidez-nous et beaucoup d'avance à l'avance …
Vous devez utiliser le nouveau formulaireData () pour envoyer de l'image à l'aide d'un appel ajax. Ceci est égal à la définition d'un type enctype sous une forme régulière (sans ajax)
Pour plus d'informations sur l'objet formulaireData, voici un lien MDN pour vous.
Code JQuery
$('#InputUploadFileImage').change(function() { /*var FilePath = this.files[0]; var FileSize = this.files[0].size; var file = this.files[0]; var name = FilePath.name; var type = FilePath.type;*/ var formData = new FormData($('*formId*')[0]); $.ajax({ type: "POST", async: true, dataType: "json", url: ajaxurl, data: ({ type: "POST", action: 'Ajax_ChangingProfileImage', formData : formData }), success: function (response) { if (response.Message === 'ImageSuccessfullyUploaded') { alert('Image Successfully Uploaded.'); $('#imgUserImage').image_src = FilePath; console.log(response.FilePath); } else { alert('Image was not uploaded successfully.'); $('#imgUserImage').image_src = FilePath; console.log(response.FilePath); } }, error: function (jqXHR, textStatus, errorThrown) { console.log(jqXHR); console.log(textStatus); console.log(errorThrown); } }); });
Code PHP
print_r($_FILES);
Je crains que vous ne puissiez pas récupérer la valeur d'une boîte de téléchargement de fichiers via JavaScript. Par conséquent, vous ne pouvez pas soumettre un téléchargement de fichier via Ajax de la même manière que les données textuelles standard.
Au lieu de cela, vous devez utiliser l'objet FormData
de JavaScript pour envelopper le fichier dans un objet de multipart/form-data
post multipart/form-data
. Reportez-vous à la réponse acceptée dans cette question StackOverflow:
Télécharger le fichier avec Ajax XmlHttpRequest
FormData
que l'API FormData
n'est pas prise en charge par Internet Explorer 9-.