Файл загрузки HTTP с JS - PullRequest
0 голосов
/ 21 июня 2020

Я хочу загрузить файл, когда пользователь нажимает Ctrl-V в текстовом поле. Мне сказали, что мне нужен обработчик запроса php POST. Я попробовал сделать это по аналогии с загрузкой файла из формы. Но мой браузер показывает (не могу опубликовать изображение, так как моя репутация ниже 10. вот ссылка) (https://c.radikal.ru/c18/2006/09/c2eca4d74442.png) На картинке браузер показывает окно с подтверждением действия на странице (я перевел с русского). В нем показан результат выполнения кода php. Код говорит: «Извините, произошла ошибка при загрузке вашего файла ...» Похоже, я не могу поймать tmp-файл, так как echo tmpfile не отображается.

Как правильно написать обработчик POST?

Вот мой код:

html:

<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3" bgcolor="#E6E6E6"><strong>Create New Topic</strong> </td>
</tr>
<tr>
<td width="14%"><strong>Topic</strong></td>
<td width="2%">:</td>
<td width="84%"><input name="topic" type="text" id="topic" size="50" /></td>
</tr>
<tr>
<td valign="top"><strong>Detail</strong></td>
<td valign="top">:</td>
<td><textarea name="detail" cols="50" rows="3" id="detail"></textarea></td>
<img id="pastedImage"></img>
</tr>

js:

document.getElementById('detail').onpaste = function (event) {
    var reader = new FileReader();
    reader.onload = function(event) {
    this.Files = event.file;
};
let filepath = "upload/images/tmp.png";
//reader.readAsDataURL(blob);
let f = new File([this.Files], filepath);
console.log(f);

//let photo = document.getElementById("image-file").files[0];  // file from input
let req = new XMLHttpRequest();
let formData = new FormData();

formData.append("photo", f);                                
call_php();                                
req.open("POST", '/upload/images');
req.send(formData);

}
}

function call_php(){
  $.ajax({
    type: "POST",
    url: "add_new_topic.php",
    //data: { file }
  }).done(function( result ) {
    alert(result);
  });
}

php:

<?php

    $target_dir = "upload/images/test1.png";
    $target_file = $target_dir;// . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    
    
      // Check if $uploadOk is set to 0 by an error
      if ($uploadOk == 0) {
        echo "Sorry, your file was not uploaded.";   
      // if everything is ok, try to upload file
      } else {
        echo $_FILES["fileToUpload"]["tmp_name"];
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
          echo "The file ". $target_file. " has been uploaded.";
          $_POST['img'] = $target_file;
        } else {
          echo "Sorry, there was an error uploading your file.";
        }
      }
    ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...