这里使用PHP实现文件的上传,由在浏览器这边选择文件,上传到服务器。其中,在上传文件中,考虑到对上传文件大小的限制、类型限制等问题。(当然可以根据我们需要修改对上传的文件的限制,而一般而言php自身也同样对将要上传的文件大小进行了限制,默认为2M,也就是说我们不能上传太大的图片。)这里我们限制用户只能上传jpg格式的图片,此外,图片大小不能超过2M。

文件上传界面 upload.php

提交含上传文件的表单时,表单form需要设置enctype属性:

<form action=”” enctype="multipart/form-data" method=”post”>
上传文件<input type=”file” name=”myfile”/>
<input type=”submit” value=”上传”/>
</form>

具体代码如下:

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>上传你的File吧</title>
</head>
<form enctype="multipart/form-data" method="post" action="uploadprocess.php">
<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="fileintro" 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><td></td></tr>
</table>
</form>
</html>

上传文件的处理  uploadprocess.php

<?php//1.接收提交文件的用户$username=$_POST['username'];$fileintro=$_POST['fileintro'];//我们这里需要使用到 $_FILES/*echo "<pre>";print_r($_FILES);echo "</pre>";*///其实我们在上传文件时,点击上传后,数据由http协议先发送到apache服务器那边,这里apache服务器已经将上传的文件存放到了服务器下的C:\windows\Temp目录下了。这时我们只需转存到我们需要存放的目录即可。//php中自身对上传的文件大小存在限制默认为2M//获取文件的大小$file_size=$_FILES['myfile']['size'];if($file_size>2*1024*1024) {echo "文件过大,不能上传大于2M的文件";exit();}$file_type=$_FILES['myfile']['type'];echo $file_type;if($file_type!="image/jpeg" && $file_type!='image/pjpeg') {echo "文件类型只能为jpg格式";exit();}//判断是否上传成功(是否使用post方式上传)if(is_uploaded_file($_FILES['myfile']['tmp_name'])) {//把文件转存到你希望的目录(不要使用copy函数)$uploaded_file=$_FILES['myfile']['tmp_name'];//我们给每个用户动态的创建一个文件夹$user_path=$_SERVER['DOCUMENT_ROOT']."/studyphp/file/up/".$username;//判断该用户文件夹是否已经有这个文件夹if(!file_exists($user_path)) {mkdir($user_path);}//$move_to_file=$user_path."/".$_FILES['myfile']['name'];$file_true_name=$_FILES['myfile']['name'];$move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strrpos($file_true_name,"."));//echo "$uploaded_file   $move_to_file";if(move_uploaded_file($uploaded_file,iconv("utf-8","gb2312",$move_to_file))) {echo $_FILES['myfile']['name']."上传成功";} else {echo "上传失败";}} else {echo "上传失败";}?>

上传文件需要考虑到如下细节:

(1)如何控制用户上传文件的大小 < 2M

//获取文件的大小
$file_size=$_FILES['myfile']['size'];
if($file_size>2*1024*1024) {echo "文件过大,不能上传大于2M的文件";exit();
}

(2)如何控制用户上传的文件类型

$file_type=$_FILES['myfile']['type'];
echo $file_type;
if($file_type!="image/jpeg" && $file_type!='image/pjpeg') {echo "文件类型只能为jpg格式";exit();
}

(3)如何防止用户图片覆盖问题

//把文件转存到你希望的目录(不要使用copy函数)
$uploaded_file=$_FILES['myfile']['tmp_name'];//我们给每个用户动态的创建一个文件夹
$user_path=$_SERVER['DOCUMENT_ROOT']."/studyphp/file/up/".$username;
//判断该用户文件夹是否已经有这个文件夹
if(!file_exists($user_path)) {mkdir($user_path);
}

为了防止不同用户上传的图片文件名相同导致图片被覆盖的问题,我们只要为不同用户创建一个文件夹就行了,不同用户上传的文件存储在不同文件夹中。

(4)如何防止同一个用户的文件名相同的问题

$file_true_name=$_FILES['myfile']['name'];
$move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strrpos($file_true_name,"."));

上面我们解决了不同用户图片覆盖的问题,但是如果同一用户上传了同一文件名不同文件内容的图片时,同样也会发生文件覆盖的问题,我们只需从C:\windows\Temp目录中上传的文件转移到服务器真正要存储的目录时将原文件名进行修改即可,而修改后的名字跟其他文件重名的几率很低,修改后的名字由上传文件的时间秒数和随机数组成。

使用PHP实现文件上传相关推荐

  1. springboot设置文件上传大小(tomcat默认1M)

    application.yml # 设置文件上传大小(tomcat默认1M) server:tomcat:max-http-form-post-size: -1 spring:servlet:mult ...

  2. 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录

    将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21). 2. 服务器账号密码(服务器登录用户名密码). 3. 上 ...

  3. Springboot 多文件上传

    其实多个文件和单个文件上传是一样的,可以使用同一个Controller 添加依赖 <!-- https://mvnrepository.com/artifact/commons-fileuplo ...

  4. django文件上传

    Django在处理文件上传时,文件数据被打包封装在request.FILES中. 一.简单上传 首先,写一个form模型,它必须包含一个FileField: # forms.py from djang ...

  5. spring boot 文件上传工具类(bug 已修改)

    以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...

  6. 模拟文件上传(一):手动文件上传

    关于上传文件,首先我的第一个案例是一个文本文件的上传,简单容易上手! 首先我们上传文件肯定就属于实体内容部分了:所以不能过GET方式请求了,要通过POST方式请求: 因为: 1.get方式是URL传值 ...

  7. Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)

    相比上一篇使用Servlet原始去实现的文件上传(http://www.cnblogs.com/EasonJim/p/6554669.html),使用组件去实现相对来说功能更多,省去了很多需要配置和处 ...

  8. 转 [JAVA] 使用 common-fileupload 实现文件上传

    就在前段时间,还在苦于找到不到合适的上传组件,虽然很早就知道了 common-fileupload,但当时却因为没有找到如何获取表单参数的方法而使用 jspSmartUpload,历尽艰辛终于找到了它 ...

  9. 三层架构中ajax,基于mvc三层架构和ajax技术实现最简单的文件上传

    前台页面提交文件 文件操作 上传文件 //上传文件 function upFile() { var file = document.getElementById("UpFile") ...

  10. 上传图片被防火墙拦截_Web安全:文件上传漏洞

    文章来源:计算机与网络安全 一般将文件上传归类为直接文件上传与间接文件上传.直接文件上传就是服务器根本没有做任何安全过滤,导致攻击者可以直接上传小马文件及大马文件(如ASP.ASPX.PHP.JSP及 ...

最新文章

  1. jsp整合mybatis案例
  2. 1w存银行一年多少利息_100万存银行一年利息多少?能赚多少钱?
  3. 荣耀V40将采用300Hz 触控采样率,1月18日正式发布!
  4. java系列4:数组的默认值
  5. 麦肯锡160页报告:2030年全球将可能有8亿人要被机器抢饭碗
  6. 对于spring中事务@Transactional注解的理解
  7. AIX ksh使用小技巧
  8. 【LaTeX安装】如何在windows电脑上安装 texlive2021
  9. 顺着IP地址他们能找到我家吗?
  10. 淘宝十年数据和轶事整理
  11. 市场下行手机市场成血海,为何荣耀逆流而上?
  12. dhcp服务器可以连接无线网吗,无线网dhcp服务器设置
  13. 100个RPA经典应用场景解析
  14. WPF实现拍照截图功能(WPFMediaKit 调用摄像头和拍照)
  15. 怎么一次性删除PPT中所有动画效果?
  16. 数据结构形象动态演示的网站
  17. python socket 域名_Python网络编程中的套接字名和DNS解析。
  18. kubeflow--安装使用pipeline
  19. Kubernetes安装与卸载
  20. linux常用技巧(一):后台下载

热门文章

  1. 测试点击屏幕次数的软件_红蜘蛛5校色仪怎么用?显示器校色及测试色域和色彩精准度详细教程...
  2. java 多线程 串行 加锁_[Java并发编程实战] 线程安全
  3. Linux下C语言开发
  4. HDU 4939 DP
  5. D3.js学习笔记七:多系列折线图与图例
  6. 消费者行为学的典型营销案例
  7. Excel 快捷键大全
  8. 从源码分析Redis分布式锁的原子性保证
  9. 程序员面试中注意事项
  10. win10内存满载测试软件,Win10自带的内存检测工具怎么用