Javascript 使用formdata进行多部分文件上载
我正在尝试上载一个包含formdata的文件。文件本身就可以工作,但我需要上传一些用户数据。我试图附加formdata,但是当我在ajax调用的php文件中“打印”数组($\文件)时,它没有出现在那里 如果有人对这个问题有解决方案,或者有更好的方法来处理带有userdata的文件上传,请让我知道 您可以在下面找到所使用的代码: php:Javascript 使用formdata进行多部分文件上载,javascript,php,jquery,ajax,file-upload,Javascript,Php,Jquery,Ajax,File Upload,我正在尝试上载一个包含formdata的文件。文件本身就可以工作,但我需要上传一些用户数据。我试图附加formdata,但是当我在ajax调用的php文件中“打印”数组($\文件)时,它没有出现在那里 如果有人对这个问题有解决方案,或者有更好的方法来处理带有userdata的文件上传,请让我知道 您可以在下面找到所使用的代码: php: AJAX文件上传 $(文档).ready(函数(){ $(“#但#上传”)。单击(函数(){ //控制台日志(“piemel”); log(document.
AJAX文件上传
$(文档).ready(函数(){
$(“#但#上传”)。单击(函数(){
//控制台日志(“piemel”);
log(document.getElementById('test').value);
var fd=新FormData();
var files=$('#file')[0]。文件[0];
fd.append('test',document.getElementById('test').value);
fd.append('file',files);
控制台日志(fd);
$.ajax({
url:'upload.php',
类型:'post',
数据:fd,
contentType:false,
processData:false,
成功:功能(响应){
如果(响应!=0){
$(“img”).attr(“src”,响应);
}
},
错误:函数(响应){
警报('错误:'+JSON.stringify(响应));
}
});
});
});
Ajax文件:
<?php
/* Getting file name */
$filename = $_FILES['file']['name'];
/* Location */
$location = "upload/".$filename;
/* Upload file */
if(move_uploaded_file($_FILES['file']['tmp_name'],$location)){
echo $location;
}else{
echo 0;
}
$\u文件
用于文件而非数据,因为您是通过post使用发送数据的$\u post
我有一个用于此的示例演示代码(我也面临此问题并创建了此脚本)
index.php
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<form id="uploadForm" action="upload.php" method="post">
<label>Upload Image File:</label><br/>
<input name="userImage" type="file" class="inputFile" />
<input type='text' name="my_name" value="harish">
<input type="submit" value="Submit" class="btnSubmit" />
</form>
<script type="text/javascript">
$(document).ready(function (e) {
$("#uploadForm").on('submit',(function(e) {
e.preventDefault();
$.ajax({
url: "upload.php",
type: "POST",
data: new FormData(this),
contentType: false,
cache: false,
processData:false,
success: function(data){
$("#targetLayer").html(data);
},
error: function(){}
});
}));
});
</script>
上传图像文件:
$(文档).ready(函数(e){
$(“#uploadForm”)。在('submit',(函数(e)上{
e、 预防默认值();
$.ajax({
url:“upload.php”,
类型:“POST”,
数据:新表单数据(本),
contentType:false,
cache:false,
processData:false,
成功:功能(数据){
$(“#targetLayer”).html(数据);
},
错误:函数(){}
});
}));
});
upload.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
if(isset($_FILES["userImage"]["type"]))
{
$validextensions = array("jpeg", "jpg", "png");
$temporary = explode(".", $_FILES["userImage"]["name"]);
$file_extension = end($temporary);
$file_type = $_FILES["userImage"]["type"];
if ((($file_type == "image/png") || ($file_type == "image/jpg") || ($file_type == "image/jpeg")
) /*&& ($_FILES["file"]["size"] < 100000)*/ //Approx. 100kb files can be uploaded.
&& in_array($file_extension, $validextensions))
{
if ($_FILES["userImage"]["error"] > 0)
{
echo "Return Code: " . $_FILES["userImage"]["error"] . "<br/><br/>";
}
else
{
if (file_exists("uploads/" . $_FILES["userImage"]["name"] . '-'.time()))
{
echo $_FILES["userImage"]["name"] . time() ." <span id='invalid'><b>already exists.</b></span> ";
}
else
{
$sourcePath = $_FILES['userImage']['tmp_name']; // Storing source path of the file in a variable
$targetPath = "uploads/".$_FILES['userImage']['name'].'-'.time(); // Target path where file is to be stored
//check the writable permissions
/*if (is_writeable('uploads/' . $_FILES['userImage']['name'])) {
die("Cannot write to destination file");
}*/
if(move_uploaded_file($sourcePath,$targetPath)) {
echo "<span id='success'>Image Uploaded Successfully...!!</span><br/>";
echo "<br/><b>File Name:</b> " . $_FILES["userImage"]["name"] . "<br>";
echo "<b>Type:</b> " . $_FILES["userImage"]["type"] . "<br>";
echo "<b>Size:</b> " . ($_FILES["userImage"]["size"] / 1024) . " kB<br>";
echo "<b>Temp file:</b> " . $_FILES["userImage"]["tmp_name"] . "<br>";
} else {
echo "<pre>"; print_r($_FILES['file']['error']); echo "</pre>";
}
}
}
}
else
{
echo "<span id='invalid'>***Invalid file Size or Type***<span>";
}
}
?>
Hm.你想上传大文件吗?因为当我处理$_文件时,上载大于20mb的文件是不成功的,直到我将IIS中可上载的最大文件数设置为可传输的最大文件数。我唯一可以上传而不干扰IIS的就是普通图片
您的代码似乎没有错,因为它必须将临时文件放入您提供的位置,所以您到底想上传什么?您在代码中使用的文件夹“upload”,是否存在?如果文件夹不存在,它也不会移动任何文件这非常适合我的需要。我只更改了$file_extension=end($temporary);到$file_extension=strtolower(end($temporary));
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
if(isset($_FILES["userImage"]["type"]))
{
$validextensions = array("jpeg", "jpg", "png");
$temporary = explode(".", $_FILES["userImage"]["name"]);
$file_extension = end($temporary);
$file_type = $_FILES["userImage"]["type"];
if ((($file_type == "image/png") || ($file_type == "image/jpg") || ($file_type == "image/jpeg")
) /*&& ($_FILES["file"]["size"] < 100000)*/ //Approx. 100kb files can be uploaded.
&& in_array($file_extension, $validextensions))
{
if ($_FILES["userImage"]["error"] > 0)
{
echo "Return Code: " . $_FILES["userImage"]["error"] . "<br/><br/>";
}
else
{
if (file_exists("uploads/" . $_FILES["userImage"]["name"] . '-'.time()))
{
echo $_FILES["userImage"]["name"] . time() ." <span id='invalid'><b>already exists.</b></span> ";
}
else
{
$sourcePath = $_FILES['userImage']['tmp_name']; // Storing source path of the file in a variable
$targetPath = "uploads/".$_FILES['userImage']['name'].'-'.time(); // Target path where file is to be stored
//check the writable permissions
/*if (is_writeable('uploads/' . $_FILES['userImage']['name'])) {
die("Cannot write to destination file");
}*/
if(move_uploaded_file($sourcePath,$targetPath)) {
echo "<span id='success'>Image Uploaded Successfully...!!</span><br/>";
echo "<br/><b>File Name:</b> " . $_FILES["userImage"]["name"] . "<br>";
echo "<b>Type:</b> " . $_FILES["userImage"]["type"] . "<br>";
echo "<b>Size:</b> " . ($_FILES["userImage"]["size"] / 1024) . " kB<br>";
echo "<b>Temp file:</b> " . $_FILES["userImage"]["tmp_name"] . "<br>";
} else {
echo "<pre>"; print_r($_FILES['file']['error']); echo "</pre>";
}
}
}
}
else
{
echo "<span id='invalid'>***Invalid file Size or Type***<span>";
}
}
?>