0
点赞
收藏
分享

微信扫一扫

5.1 物联网RK3399项目开发实录-Android开发之ADB使用(wulianjishu666)

思考的鸿毛 1天前 阅读 1

一、文件上传

文件上传的基础知识:

  1. 首先,在客户端form表达设置,选择上传的文件
  2. 然后,在服务器对上传文件进行操作处理

1.1 关于前台页面

必须设置 form 表单项:

<html>
    <head><title>文件上传</title></head>
    <body>
        <from action="./upload.php" method="post" enctype="multipart/form-data">
            选择文件: <input type="file" name="myfile">
            <input type="submit" value="上传文件">
        </from>
    </body>
</html>

注意事项

1.2 后端的php程序

1.3 php的文件上传处理函数

案例:

前台页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <from action="./upload.php" method="post" enctype="multipart/form-data">//必须要写
    选择文件:<input type="file" name="myfile">
    <input type="submit" value="上传文件>
    </from>
</body>
</html>

后台程序

<?php
    header("Content-type:text/html;charset=utf-8");

    // myfile 是前台的html页面中的name属性的值
    // $_FILES['myfile']['error'] 数组可以判断是否上传成功
    if ($_FILES['myfile']['error'] > 0){
        echo "上传发生错误".$_FILES['myfile']['error']."<br>";
    }else{
        echo "文件上传成功<br>";
        echo "文件名称:".$_FILES['myfile']['name']."<br>";
        echo "文件类型:".$_FILES['myfile']['type']."<br>";
        echo "文件大小:".$_FILES['myfile']['size']."<br>";
        echo "文件临时存储位置:".$_FILES['myfile']['tmp_name']."<br>";
        
        # $_FILES['myfile']['name'] 保存的文件名,但是文件名如果有中文,会导致失败
        # 用 iconv 将文件名编码修改为gbk
        # 最终用 $fileName 保存修改编码后的文件名
        $fileName = iconv("UTF-8","GBK",$_FILES['myfile']['name']);

        // 将临时存储的文件移动到当前位置下的abcd目录中
        // 移动过去后将文件名修改为原始名字
        $res = move_uploaded_file($_FILES['myfile']['tmp_name'],"./abcd/".$fileName);
        if($res)
        {
            // 最后在页面上需要显示文件名,所以需要将编码从gbk修改回utf-8
            $fileName = iconv("GBK","UTF-8",$fileName);
            echo "文件成功移动到./abcd/".$fileName;
        }else{
            echo "文件移动失败";
        }
     } 
?>

1.4 扩展内容

PHP 配置文件中与文件上传有关的选项

指令名默认值功能描述
file_uploadsON是否开启文件上传
upload_max_filesize2M限制PHP处理上传文件的最大值,此值必须小于post_max_size
post_max_size8M限制通过POST方法可以接收信息的最大值,也就是整个POST请求的提交值。此值必须大于 upload_max_filesize
upload_tmp_dirNULL上传文件存放的临时路径,可以是绝对路径。默认NULL 则使用系统的临时目录。
max_file_uploads20文件允许同时上传的个数

关于 error 文件上传的错误代码:

UPLOAD_ERR_OK: 其值为0,没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE: 其值为1,上传的文件超过了php.ini中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE: 其值为2,上传文件的大小超过了HTML表单中MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL: 其值为3,文件只有部分被上传。
UPLOAD_ERR_NO_FILE: 其值为4,没有文件被上传。
UPLOAD_ERR_NO_TMP_DIR: 其值为6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进
UPLOAD_ERR_CANT_WRITE: 其值为7,文件写入失败。PHP 5.1.0 引进

常见数据格式(MIME)

文件类型MIME 类型
图片文件image/gif,image/jpg,image/jpeg,image/png,image/x-png
纯文本和HTMLtext/txt,text/plan,text/html
二进制文件application/octet-stream
音频格式audio/basic
视频格式video/mpeg

案例:

参考版本

<?php
    //第一步:明确服务器规定上传至服务器的文件类型。这里我们只允许上传以下类型的图片。
    $allowedExts = array("git","jpeg","jpg","png");// 允许上传的图片后缀

    //第二步:获取上传的文件名称,通过explorde()函数将其分割成字符串形式的数组。
    $temp = explode(".",$_FILES['myfile']['name']);
    echo $_FILE['myfile']['size'];
    $extension = end($temp);    //end函数用于获取数组中最后一个元素的值。

    //第三步:列出上传文件需要满足的
    if ((($_FILES['myfile']['type'] == 'image/gif')
    || ($_FILES['myfile']['type'] == 'image/jpeg')
    || ($_FILES['myfile']['type'] == 'image/jpg')
    || ($_FILES['myfile']['type'] == 'image/pjpeg')
    || ($_FILES['myfile']['type'] == 'image/x-png')
    || ($_FILES['myfile']['type'] == 'image/png'))
    && ($_FILES['myfile']['size'] < 204800 ) // 小于 200 kb
    && in_array($extension,$alloweExts))  //in_array表示在$allowedExts数组中查找$extension这个字符串
    {
        if ($_FILES["myfile"]["error"] > 0)
        {
            echo "错误::".$_FILES["myfile"]["error"]."<br>";
        } else {
            echo "上传文件名:".$_FILES["myfile"]["name"]."<br>";
            echo "文件类型:".$_FILES['myfile']['type']."<br>";
            echo "文件大小:".($_FILES['myfile']['size'] / 1024)."<br>";
            echo "文件临时存储位置:".$_FILES['myfile']['tmp_name']."<br>";
            
            // 判断当前目录(即www文件夹中)下的upload目录(自己创建,名字自取)是否存在该文件
            // 如果没有upload目录,你需要创建它,upload目录权限为777
            if (file_exists("upload/".$_FILES['myfile']['name']))
            {
                echo $_FILES['myfile']['name'].'文件已经存在。';
            } else {
                //如果upload目录不存在该文件则将文件上传到upload目录下
                move_upload_file($_FILES['myfile']['tmp_name'],"upload/".$_FILES['myfile']['name']);
                echo "文件存储在:"."upload/".$_FILES['myfile']['name'];
            }
        }

    } else {
        echo "非法的文件格式";
    }
?>

多文件上传

二、 文件下载

2.1 对于浏览器不识别的文件,可以直接利用a链接下载

<!-- 因为他们三个浏览器不认识这样的类型 -->
<a href="./downlist/1.rar">1.rar</a>
<a href="./downlist/1.exe">1.exe</a>
<a href="./downlist/1.avi">1.avi</a>

2.2 对于浏览器不识别的,可以利用readfile函数

<!-- 浏览器人事这样的类型就会被解析 -->
    <a href="./action.php?name=1.html">1.html</a>
    <a href="./action.php?name=1.php">1.php</a>
    <a href="./action.php?name=1.txt">1.txt</a>
    <a href="./action.php?name=1.jpg">1.jpg</a>

//接收一下name值
$name = $_GET['name'];

//实现下载功能,强制浏览器弹出另存为对话框
header('content-Disposition:attachment;filename="'.$name.'"');
//此时只是下载了一个空文件,需要利用readfile读一遍所有的内容,便可下载。
$path = './downlist/'.$name;
readfile($path);

2.3 案例:

1、创建一个文件下载链接

2、创建一个文件下载处理脚本

举报

相关推荐

0 条评论