我想将JSON和txt文件上传到服务器,大小为200KB。
这是我正在使用的脚本:
$allowedExts = array("json", "txt");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "application/json")
|| ($_FILES["file"]["type"] == "text/txt"))
&& ($_FILES["file"]["size"] < 200000)
&& in_array($extension, $allowedExts)
) {
if ($_FILES["file"]["error"] > 0) {
echo "Código do erro: " . $_FILES["file"]["error"] . "<br>";
} else {
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload" . $_FILES["file"]["name"]);
echo "Gravado em: " . $diretorio . $_FILES["file"]["name"];
}
} else {
echo "Invalid file.";
}
但我总是收到“无效文件”错误。为什么?
答案 0 :(得分:1)
您实际上并未提交表单。当您更改upload
字段的值时,您的javascript只会在浏览器窗口(upload.php)中加载新页面。
请阅读本文,了解如何使用jQuery上传文件,因为它并不像人们希望的那样简单。
How can I upload files asynchronously?
或者,如果您的目的是实际重定向到这个新页面(而不是在浏览器中重新加载页面而上传文件),那么您可以简单地为文件上传执行传统的非AJAX表单,如@OlafErlandsen的答案在这里。
答案 1 :(得分:0)
使用 enctype :
<form method="post" action="" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
并使用此内容类型(以避免出现问题):
$types = array('application/json','application/x-javascript','text/javascript','text/x-javascript','text/x-json');
if( in_array( $_FILES['file']['type'] , $types ) )
而且,如果你使用jQuery:
var formData = new FormData($('form')[0]);
$.ajax({
url: 'file.php',
type: 'POST',
success: function ( response ){ console.log( "ok" ); },
data: formData,
cache: false,
contentType: false,
enctype: 'multipart/form-data',
processData: false
});
然后,尝试使用此课程上传:
祝你好运!