gpt4 book ai didi

php - 使用 jQuery 通过 ajax 从 multipart/form-data 发送数据

转载 作者:行者123 更新时间:2023-11-30 08:13:12 25 4
gpt4 key购买 nike

我一整天都在处理这个问题,但就是无法正常工作。

我基本上得到了一个使用 jQuery 库的简单 ajax 请求,我想通过 mutlipart/form-data 文件输入发送我发布的数据,但是,我已经尝试了我能想到的一切。

我的文件上传脚本已准备就绪,正在等待文件名作为参数(也尝试过没有),但它只是不想从文件输入框本身获取数据。

谁能告诉我如何在没有其他插件(多次上传等)的情况下做到这一点。

这是我的 jQuery 代码:

函数上传时间表(){

$('#waiting').show();

var error = '';

var msg = '';

//Performs the Ajax Request
var data = $.ajax({
type : 'POST',
url : '/ajax/timesheet/uploadNewTimesheets.php',
dataType : 'json',
contentType : 'multipart/form-data',
data : data,
error : error,
msg : msg,
success : function(data){

if(!data){
$('#notification').removeClass(this).addClass('notification-success').html(data).show().delay(1200).fadeOut(800);
getActiveTimesheets(getSelectedPage());
}else{
$('#notification').removeClass().addClass('notification-error').html(data.msg + data.errorList).show();
alert('PHHAIL');
}

$('#waiting').hide();
function(xhr, status, errorThrown){
$('#waiting').hide();
}
}
});

这是我的 PHP 上传脚本:

    /**
* Creates a directory in the active directory with the given folder name
*
* @author RichardC
* @param string $dirName
* @return boolean
*/
public function createDir( $dirName ) {

$docRoot = getenv('DOCUMENT_ROOT');

if (!is_dir(sprintf('%s/%s', $docRoot, $dirName))) {
$makeDir = mkdir(sprintf('%s/%s', $docRoot, $dirName));
echo sprintf('Creating a folder called \'/%s/\' ...', $dirName);
if ($makeDir) {
echo '<br />Successfully created the folder.<br />';
return true;
} else {
echo sprintf('<br /> Sorry, please create the folder manually at: %s/%s', $docRoot, $dirName);
return false;
}
}
}

/**
* Uploads either a CSV or an EXCEL file to a temporary directory
*
* @author RichardC
* @param Resource $file
* @return Boolean true/false
*/
public function upload( $filename ) {

$filename = (!isset($filename)) ? $this->file : $filename;

//Get the document root
$docRoot = getenv('DOCUMENT_ROOT');

$this->createDir('uploads');

if (($_FILES['file']['type'] == 'application/vnd.ms-excel') || ($_FILES['file']['type'] == 'application/csv') || ($_FILES['file']['type'] == 'text/csv') || ($_FILES['file']['type'] == 'text/comma-separated-values') || ($_FILES['file']['type'] == 'application/excel') &&
($_FILES["file"]["size"] < 1000000)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
} else {
if (file_exists($docRoot . "upload/" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
$this->file = $docRoot . '/upload/' . $_FILES["file"]["name"];
} else {
move_uploaded_file($_FILES["file"]["tmp_name"], $docRoot . "/upload/" . $_FILES["file"]["name"]);
$this->file = $docRoot . '/upload/' . $_FILES["file"]["name"];
}
}
} else {
echo "Invalid file";

return false;
}

//Remove the unwanted file now
$this->fileContents = file_get_contents($this->file);
@unlink($this->file);
unset($this->file);

return true;
}

如果有人可以提供帮助,我们将不胜感激!

最佳答案

为了让你的 multipart/formdata 工作,你必须在你的 ajax 请求中添加一些额外的东西:

cache: false,
contentType: false,
processData: false,

您可以通过这样做轻松地创建您的数据字段:

var uploadData = $("#uploadFile").prop("files")[0];
var newData = new FormData();

$.each($('#uploadFile').prop("files"), function(i, file) {
newData.append('file-'+i, file);
});

在您的 ajax 请求中,您必须设置:

data: newData

关于php - 使用 jQuery 通过 ajax 从 multipart/form-data 发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7516381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com