PHP文件上传,下载,Sql工具类!
PHP文件上传,下载,Sql工具类! 对文件大小,文件类型 同名覆盖 中文转码的操作,可直接使用
前台 upload.html
<!DOCTYPE html>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form enctype="multipart/form-data" action="uploadProcess.php" method="post">
<table>
<tr><td align="center" colspan="2"><font style="font-size: 40px; font-family: 华文彩云;" >文件上传</font></td></tr>
<tr>
<td>请填写用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>介绍:</td>
<td><textarea name="intro" rows="10" cols="80"></textarea></td>
</tr>
<tr>
<td>请选择你要上传的文件</td>
<td><input type="file" name="myfile"></td>
</tr>
<tr><td><input type="submit" value="上传文件" /></td></tr>
</table>
</form>
</body>
</html>

控制器 FileProcess.php
<?php
require_once 'FileService.php';
$fileService = new FileService(); if (!empty($_REQUEST['flag'])) {
$flag = $_REQUEST['flag'];
//上传
if ($flag == "upload") {
$username = $_POST['username'];
$intro = $_POST['intro']; $fileService -> Upload($username,$intro);
}elseif ($flag == "down") {
//接收要下载的文件名字
$filepath = $_GET['filepath'];
$filename = $_GET['filename']; $fileService = new FileService();
$fileService->Download($filepath,$filename); }
} ?>
后台 FileService.php
<?php
header("content_type:text/html;charset=utf-8");
require_once 'SqlHelper.php';
error_reporting(E_ALL & ~E_NOTICE); class FileService{ //查询所有文件信息
function fileInfo(){ $sql = "select * from upload";
$sqlHelper = new SqlHelper(); $res = $sqlHelper->execute_dpl($sql);
return $res; $res->free();
} /*
*上传文件
* 功能
* 限制文件大小/类型
* 防止不同用户上传同名图片被覆盖的问题
* 防止同一用户上传的文件名相同的问题
* 参数
* $username
* $intro
*
*is_uploaded_file 上传到tmp缓存
*move_uploaded_file 移动到目标文件
*/
function Upload($username,$intro){ /*********对文件类型进行限制**********/ //获取文件的大小,限制上传文件的大小10M
$file_size = $_FILES['myfile']['size'];
if ($file_size>10*1024*1024) {
echo "<script>alert('上传失败,上传的文件不能超过10M的文件');history.go(-1);</script>";
//echo "上传失败,上传的文件不能超过10M的文件!";
exit();
} //限制上传文件类型
/*
$file_type = $_FILES['myfile']['type'];
if ($file_type!='image/jpg' && $file_type!='image/pjpeg') {
echo "上传失败,文件类型只能是jpg格式!";
exit();
}*/ //判断文件是否上传成功
if (is_uploaded_file($_FILES['myfile']['tmp_name'])) { /***防止不同用户上传同名图片被覆盖的问题->给每个用户创建一个文件夹*****/
//一般创建文件夹的时候根据id创建(username换成id,入参时带入id),防止汉字乱码
//给每个用户动态创建一个相应的文件夹
$user_path = $_SERVER['DOCUMENT_ROOT']."Demo/File/UpDown/upload/".$username;
//判断该用户是否已经有文件夹
if (!file_exists($user_path)) {
mkdir($user_path);
} /****防止同一用户上传的文件名相同的问题->给每个文件名加上时间戳********/
//tmp里的文件名
$file_name = $_FILES['myfile']['name'];
//把缓存文件转存到你希望的目录
$uploaded_file = $_FILES['myfile']['tmp_name'];
//目标路径=(目标目录+用户名)+当前时间+后缀(strpos()字符串首次出现的位置)
$move_to_file = $user_path."/".time().rand(1,1000).substr($file_name, strpos($file_name, ".")); //对中文路径转码
$move_to_file = iconv("utf-8", "gb2312", $move_to_file); /******************数据库操作***********************/
//存入数据库
$uptime = date('Y-m-d H:i:s'); //获取当前上传时间 $sql = "insert into upload (username,fname,fsize,uptime,fpath,intro) values ('$username','$file_name','$file_size','$uptime','$move_to_file','$intro')"; $sqlHelper = new SqlHelper();
$res = $sqlHelper->execute_dml($sql); //判断是否将上传的文件移动到目标位置(先判断是否上传成功,再判断是否添加到数据库)
if (move_uploaded_file($uploaded_file, $move_to_file)) { //res=1表示添加上传成功
if ($res == 1) { echo "<script>alert('{$_FILES['myfile']['name']}文件上传成功');window.location.href='down.php';</script>";
}else{
echo "<script>alert('文件上传失败');history.go(-1);</script>";
} }else{
echo "<script>alert('文件上传失败');history.go(-1);</script>";
} }else{
echo "<script>alert('文件上传失败');history.go(-1);</script>";
}
} /**
*
* 参数说明:
* 下载文件
* $filepath 文件路径
* $filename 文件名
*
*/
function Download($filepath,$filename){
//对中文文件名进行转码
$filename=iconv("UTF-8","GB2312",$filename); if(!file_exists($filepath)){ //检查文件是否存在
echo "<script>alert('该文件不存在!');history.go(-1);</script>";
// echo "该文件不存在!"; return;
} $fp = fopen($filepath, 'r'); //打开文件
$file_size = filesize($filepath); //计算文件大小 if ($file_size>10*1024*1024) { echo "<script>window.alert('文件过大,您没权限下载')</script>";
return;
}
//HTTP头部信息
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: ".$file_size);
header("Content-Disposition: attachment; filename=".$filename); $buffer = 1024;
//为了下载安全,做一个文件字节读取计数器
$file_count = 0;
//判断文件是否结束 feof
while (!feof($fp) && ($file_size-$file_count > 0)) { $file_data = fread($fp, $buffer); //统计读了多少字节
$file_count+=$buffer; echo "$file_data"; //把数据会送给浏览器
}
fclose($fp);
} } ?>

工具类 SqlHelper.php
<?php /**
* sql工具类(dml,dpl,dpl_arr,close_link)
*
*1.创建MySqli对象
*2.操作数据库(发送sql)
*3.处理结果
*4.关闭资源
*
*/ class SqlHelper {
private $link;
private static $host = 'localhost';
private static $user = 'root';
private static $pwd = '';
private static $db = 'test'; public function __construct() { //初始化
$this->link = new MYSQLi(self::$host,self::$user,self::$pwd,self::$db);
if ($this->link->connect_error){
die("数据库连接失败".$this->link->connect_error);
}
$this->link->query("set names utf8");
} /**
* dpl操作
* @param unknown $sql
*/
public function execute_dpl($sql){
$res = $this->link->query($sql) or die("操作dpl失败".$this->link->error);
return $res;
} /**
* dpl操作
* @param $sql
* @return arr
* 把结果放在数组里。这样资源可以随时关闭,返回一个数组
*/ public function execute_dpl_arr($sql){
$arr = array();
$res = $this->link->query($sql) or die("操作dpl_arr失败".$this->link->error);
//把$res=>$arr,把结果集内容转移到一个数组中
while ($row = $res->fetch_assoc()){
$arr[] = $row;
}
//这里可以把资源立即关闭
$res->free();
return $arr;
} /**
* dml操作 update/delete/insert
* @param unknown $sql
*/
public function execute_dml($sql){ $res = $this->link->query($sql) or die("操作dml失败".$this->link->error);
if (!$res){
return 0; //失败
}else {
if ($this->link->affected_rows>0){
return 1; //成功
}else {
return 2; //没有行受到影响
}
}
$res->free();
} //关闭链接
public function close_link(){
if (!empty($this->link)){
$this->link->close();
}
} }
PHP文件上传,下载,Sql工具类!的更多相关文章
- SpringMVC文件上传下载
在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/q ...
- commons-fileupload实现文件上传下载
commons-fileupload是Apache提供的一个实现文件上传下载的简单,有效途径,需要commons-io包的支持,本文是一个简单的示例 上传页面,注意设置响应头 <body> ...
- JavaWeb 文件上传下载
1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...
- 转载:JavaWeb 文件上传下载
转自:https://www.cnblogs.com/aaron911/p/7797877.html 1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端 ...
- Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- Hadoop之HDFS原理及文件上传下载源码分析(下)
上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文 ...
- CentOS下安装配置NFS并通过Java进行文件上传下载
1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...
- C# Http文件上传下载
C# Http文件下载公共类(支持断点续传) http://www.cnblogs.com/hayden/archive/2012/04/26/2472815.html C# Http方式下载文件到本 ...
- SpringMVC整合fastdfs-client-java实现web文件上传下载
原文:http://blog.csdn.net/wlwlwlwl015/article/details/52682153 本篇blog主要记录一下SpringMVC整合FastDFS的Java客户端实 ...
随机推荐
- Angular使用总结 --- 搜索场景中使用rxjs的操作符
在有input输入框的搜索/过滤业务中,总会考虑如何减少发起请求频率,尽量使每次的请求都是有效的.节流和防抖是比较常见的做法,这类函数的实现方式也不难,不过终归还是需要自己封装.rxjs提供了各种操作 ...
- 机器学习与Tensorflow(2)——神经网络及Tensorflow实现
神经网络算法以及Tensorflow的实现 一.多层向前神经网络(Multilayer Feed-Forward Neural Network) 多层向前神经网络由三部分组成:输入层(input la ...
- 条件变量 sync.Cond
sync.Cond 条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用. sync.Cond 条件变量用来协调想要访问共享资源的那些线程,当共享资源的状态发生变化的时候,它可以用来通知被互斥锁阻 ...
- Python中的 // 与 / 的区别
" / " 表示浮点数除法,返回浮点结果;" // " 表示整数除法,返回不大于结果的一个最大的整数 [code] print("6 // 4 = & ...
- Java实现二叉树先序,中序,后序,层次遍历
一.以下是我要解析的一个二叉树的模型形状.本文实现了以下方式的遍历: 1.用递归的方法实现了前序.中序.后序的遍历: 2.利用队列的方法实现层次遍历: 3.用堆栈的方法实现前序.中序.后序的遍历. . ...
- Spark实战1
1. RDD-(Resilient Distributed Dataset)弹性分布式数据集 Spark以RDD为核心概念开发的,它的运行也是以RDD为中心.有两种RDD:第一种是并行Col ...
- Googel 浏览器 模拟发送请求工具--Advanced REST Client
Advanced REST Client是 Chrome 浏览器下的一个插件,通过它可以发送 http.https.WebSocket 请求.在 Chrome 商店下搜索 Advanced REST ...
- java sendmail
http://blog.csdn.net/Guerlei/article/details/53189522
- HashMap底层原理分析(put、get方法)
1.HashMap底层原理分析(put.get方法) HashMap底层是通过数组加链表的结构来实现的.HashMap通过计算key的hashCode来计算hash值,只要hashCode一样,那ha ...
- [总结]多项式类数学相关(定理&证明&板子)
目录 写在前面 前置技能 多项式相关 多项式的系数表示 多项式的点值表示 复数相关 复数的意义 复数的基本运算 单位根 代码相关 多项式乘法 快速傅里叶变换 DFT IDFT 算法实现 递归实现 迭代 ...