大文件注意的点:
我的环境是ubuntu18.04 + apache2 + php7.0
修改apache的配置(php.ini):
sudo vim /etc/php/7.0/apache2/php.ini
1. 找到post_max_size = 8M(默认值) 改成 post_max_size= 2G?
2. 找到upload_max_filesize = 2M(默认值) 改成 post_max_size= 2G?
重启服务器:
sudo /etc/init.d/apache2 restart
前端进度条:
var obj = new XMLHttpRequest();
obj.onreadystatechange = function() {
console.log(obj.responseText);
if (obj.status == 200 && obj.readyState == 4) {
$('.upgrade-text').text('Upload Successfully.');
var fallback = eval("(" + obj.responseText + ")");
if(fallback.msg === 'success'){
toastr.success('Upgrade successfully.');
setTimeout(() => {
$('#modal-upgrade').modal('hide');
}, 1500);
}else if(fallback.error === 1){
toastr.error('ERROR: Upload Failed. The file is too large!');
}
}
}
// 通过Ajax对象的upload属性的onprogress事件感知当前文件上传状态
obj.upload.onprogress = function(evt) {
// 上传附件大小的百分比
var per = Math.floor((evt.loaded / evt.total) * 100) + "%";
$('.upgrade-text').html('Uploading(<label style="font-weigh: 600;">'+ per +'</label>)');
// 当上传文件时显示进度条
document.getElementById('parent').style.display = 'block';
// 通过上传百分比设置进度条样式的宽度
document.getElementById('son').style.width = per;
}
// 通过FormData收集零散的文件上传信息
var fm = document.getElementById('firmwareFile').files[0];
var fd = new FormData();
fd.append('file', fm);
obj.open("post", "firmware-save-file.php");
obj.send(fd);
php后台:
<?php
// if user not login, redirect to login.php
// 防止全局变量造成安全隐患
$admin = false;
// 启动会话
session_start();
// 判断是否登陆
if (!isset($_SESSION["admin"]) || $_SESSION["admin"] === false) {
// 验证失败,将 $_SESSION["admin"] 置为 false
$_SESSION["admin"] = false;
Header("Location: ./login.php");
}
$err = '';
if ($_FILES["file"]["error"] > 0){
$err = '{error: '. $_FILES["file"]["error"] . '}';
}else{
// 如果 /var/www/meta/ 目录不存在该文件则将文件上传到 /var/www/meta/目录下
$back = move_uploaded_file($_FILES["file"]["tmp_name"], "/var/www/meta/" . $_FILES["file"]["name"]);
if($back == 1){
$err = '{msg: "success"}';
}else{
echo $back;
}
}
if($err !== ''){
echo $err;
}
?>
|