我正在尝试构建一个允许在PHP中上传文件的应用程序。上传文件时,应将下载链接附加到特定的div。我正在使用 ajax 调用来运行 php 脚本,以便我可以回显文件下载链接而不会卡在 php 页面上。(我希望这是有道理的。
这是 html:
<form action="php/upload.php" method="POST" enctype="multipart/form-data" id="uploadform">
Select file to upload:
<input type="file" name="fileToUpload" id="file">
<input id="create" type="submit" value="Upload File">
</form>
下面是进行 ajax 调用的外部 javascript/jquery:
$(function () {
$('form').on('submit', function (e) {
//prevents reloading of page
e.preventDefault();
//get file data
var file_data = $("#file").prop("files")[0];
var form_data = new FormData();
form_data.append('file', file_data);
//run upload.php script and append result to draggable block
$.ajax({
type: 'post',
url: 'php/upload.php',
cache: false,
data: form_data,
success: function (data) {
$( "#draggable"+i).append(data);
i++;
}
});
});
});
这是应该上传文件的外部 php 脚本:
<?php
$target_path = "../uploads/";
$target_path = $target_path . basename( $_FILES[ 'fileToUpload' ][ 'name' ] );
if ( move_uploaded_file( $_FILES[ 'fileToUpload' ][ 'tmp_name' ] , $target_path ) ){
//echo '<a href=' . $target_path . ' download>Download</a>';
}
else {
echo $target_path;
//var_dump($_FILES);
}
我收到以下错误:未捕获的类型错误:非法调用
问题来自尝试在 ajax 调用中传递"form_data"。我正在尝试这样做,因为一旦运行 php 脚本,$_FILES 数组就会变为空。我需要一种方法来确保我上传的文件存储在该数组中。
自己解决了。需要向 ajax 调用添加几件事:
$.ajax({
type: 'post',
url: 'php/upload.php',
cache: false,
** contentType: false, **
** processData: false, **
data: new FormData(this),
success: function (data) {
$( "#draggable"+i).append(data);
i++;