php - Ajax 文件上传从 php 端给出未定义的索引文件
问题描述
我已经尝试了我遇到的所有东西,我确信代码中有一些我没有的东西。请我需要一些帮助。这是 html,它是一种带有一个输入的表单,应该接收文件
<div id="Posts">
<h1 style="text-align: center;color: red;">SERVICES</h1>
<p style="text-align: center;"><span style="color:red;">***</span> please ensure to look at the definitions of every field... <span style="color:red;">***</span></p>
<form id="promo_imgs" enctype="multipart/formdata">
<h5 style="text-align: center;"> About the Services You offer</h5><hr style="width: 30%; border:0.5px dashed red;">
<div id="imgpr" class="imgpromo" style="max-width: 40%; min-height: 60px;border:dashed 0.5px;">
<label for="promotion" class="btn btn-primary">
Select an Image
</label>
<img src="" alt="" width="100%" style="max-height: 250px;" id="img">
<input type="file" name="promo0" accept=".png, .jpeg, .jpg" id="promotion" style="display:none;">
</div>
<button class="btn btn-primary" type="submit" id="serv_upload" name="serv_upload">Upload</button>
</form><span id="ajax">
<!--upload an image -->
</span>
然后这是它的 jquery 部分,它应该预览图像(有效)然后上传图像(成功返回未定义的索引文件错误)
/* to preview before upload service images*/
$(document).on('change',"#promotion",function(){
var link =URL.createObjectURL(event.target.files[0]);
console.log(link);
var $this=$(this);
$("#img").slideDown("fast").attr('src',link);
$("#serv_upload").slideDown("slow");
});
/* to upload service images*/
$(document).on('click',"#serv_upload",function(e){
e.preventDefault();
$("#ajax").html("Uploading...");
var files = $('#promotion').val(e.target.files);
for (var i = 0; i < files.length; i++) {
var file = files[i];
var formdata= new FormData();
formdata.append('file',file);
$("#ajax").append(file.name);
$.ajax({
type:"POST",
url:"aboutinsert.php",
data:{formdata:formdata},
processData:false,
contentType:false,
cache:false,
success: function(data){
$("#ajax").html(data);
}
});
}
});
最后是php部分
$dir="img/portfolio" ;
$file = $_FILES['file']['name'];
$path = $dir.basename($file);
$ext= pathinfo($path,PATHINFO_EXTENSION);
$extensions = array("JPG","jpg","jpeg","png");
$exts=strtolower($ext);
if (!in_array($exts, $extensions)) {
# code...
echo "sorry you donot have the right file format";
}
elseif ($_FILES['file']['size']>2000000) {
# code...
echo "your file is larger than 2mb";
}
elseif (file_exists($path)) {
# code...
echo "sorry a file already exists with this name change the name and try again";
}
else{
if (move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
# code...
echo basename($_FILES['file']['name']). "upload success";
}
else{
echo "file Upload failed";
}
}
解决方案
$_FILES
您的 PHP 代码中的数组中似乎使用了一些随机名称。你用:
$file = $_FILES['file']['name'];
接着
elseif ($_FILES['promo0']['size']>2000000) {
最后
if (move_uploaded_file($_FILES['image']['tmp_name'], $path)) {
它是哪一个?如果你不确定,你可以var_dump($_FILES);
看看你有什么。
推荐阅读
- python - 如何替换 Python DatetimeWithNanoseconds 对象中的日期时间字段
- c# - 尝试在焦点/单击时选择 TextBox 中的所有文本
- autohotkey - 如何禁用自动热键中的语法字符?
- python - 如何使用 python 将页面添加到现有的 excel 电子表格
- excel - 下拉覆盖后将单元格重置回公式
- c# - Xamarin:共享对话框将关闭时的事件处理程序
- c# - 比较两个列表
> 在 C# 中并获取结果列表 - apache - .htaccess 重定向 301:多个斜杠的问题
- r - 我有一个包含性别、班级和年龄的数据框。我需要一个结果表,给出按性别和班级划分的年龄平均值,平均值与观察值的差异
- git - 如何触发对詹金斯多分支管道的扫描?