我正在向我的php页面添加文件上传功能。代码对我来说似乎是正确的,它甚至将文件添加到具有正确名称的服务器,但没有内容。即加载图像时有一个空的.jpg文件。
你们中任何一位经验丰富的php开发人员都可以看到我做错了产生空文件。
调用脚本:
<script>
$(document).ready(function(){
$("#mediaFileInput").on("change", function(e){
console
if (e.target.value) {
var formData = new FormData(e.target.form);
$.ajax({
url: 'media.php', //Server script to process data
type: 'POST',
success: function(data){
location.reload();
},
// Form data
data: formData,
//Options to tell jQuery not to process data or worry about content-type.
cache: false,
contentType: false,
processData: false
});
}
});
});
</script>
忽略原始
<?php
require('config/config.php');
$file_uploaded;
$mime_type;
// Handle multipart file uploads
if (isset ( $_FILES ['file'] )) {
$file_uploaded = fopen($_FILES['file']['name'], "r");
$mime_type = $_FILES['file']['type'];
} else if ($_SERVER["REQUEST_METHOD"] == "POST") {
/* PUT data comes in on the stdin stream */
$file_uploaded = fopen("php://input", "r");
/* Open a file for writing */
$mime_type = $_SERVER["CONTENT_TYPE"];
}
$file_name = $_FILES['file']['name'];
$new_path = "media/" . $file_name;
$media_url = "/" . $new_path;
$fp = fopen($new_path, "w");
/* Read the data 1 KB at a time
and write to the file */
while ($data = fread($file_uploaded, 1024)) {
fwrite($fp, $data);
}
/* Close the streams */
fclose($fp);
fclose($file_uploaded);
chmod($new_path, 0755);
// insert into database.
$stmt = $db_conn->prepare("INSERT INTO MEDIA (type, url) VALUES(?, ?)");
$stmt->bind_param('ss',
$mime_type,
$media_url);
$stmt->execute();
$media_id = $db_conn->insert_id;
$stmt->close();
echo json_encode(array("id" => $media_id, "type" => $mime_type, "url" => $media_url));
?>
答案 0 :(得分:0)
您不应该使用fopen("php://input", "r");
,因为根据docs for it:
php://输入不适用于enctype =&#34; multipart / form-data&#34;。
当您上传文件时,您必须使用enctype="multipart/form-data"
。因此,请使用move_uploaded_file。
此外,您的其他分支中的fopen($_FILES['file']['name'], "r");
没有意义,因为它只是尝试打开没有特定路径的文件名。使用move_uploaded_file。