• Ajax 无刷新上传文件插件 uploadify 的使用


    在表单中无法直接使用 Ajax 上传文件,解决的思路可以是使用插件无刷新地上传文件,返回文件上传后的地址,然后把该地址作为 Ajax 的参数传递给服务器端进行数据库处理。可以使用 uploadify 插件来实现该思路。

    官方网站:http://www.uploadify.com

    文档地址:http://www.uploadify.com/documentation/

    插件有 Flash 版 和 HTML5 版,项目中用到的是 Flash 版。

    下载 Demo 并解压:

     

    其中 index.php :包含了 html ,并且调用了核心 js 库的接口;

    jquery.uploadify.js :核心 js 库;

    uploadify.php :处理上传,并且返回上传是否成功的状态值。

    对官方 demo 稍作修改:

    index.html 主要代码

    <!DOCTYPE html>
    <html>
    <head>
    <link rel="stylesheet" href="__PUBLIC__/css/uploadify.css" type="text/css">    
    <script src="__PUBLIC__/js/Jquery-1.8.3.js.js"></script>
    <script src="__PUBLIC__/js/jquery.uploadify.js" type="text/javascript"></script>
    <script src="__PUBLIC__/js/upload.js" type="text/javascript"></script>
    </head>

    <body> <form id="upform"> <div id="queue"></div> <input id="file_upload" name="file_upload" type="file" multiple="true"> </form> </body> </html>

    upload.js 代码:

    $(function(){
        $timestamp = $("#timestamp").html();
        $token = $("#token").html();
        $swfurl = $("#swfurl").html();
        $('#file_upload').uploadify({
            'formData'     : {
                'timestamp' : $timestamp,
                'token'     : $token
            },
            'swf'      : $swfurl,
            'uploader' : 'uploadify.php',
            'onUploadSuccess' : function(file, data, response) {
                var dataObj = eval("(" + data + ")");
                if(1 == dataObj.code){
                    $msg = '文件'+ file.name + '上传成功';
                    $("#msg").html($msg);
                    $("#filename").html(dataObj.filename);
                }else if(2 == dataObj.code){
                    $msg = '文件上传失败,请上传小于2M的.dox、.docx、.pdf文件';
                    layer.msg($msg, 2, 3);
                }else if(3 == dataObj.code){
                    $msg = '文件类型错误';
                    layer.msg($msg, 2, 3);
                }else{
                    $msg = '上传失败,请上传小于2M的.dox、.docx、.pdf文件';
                    layer.msg($msg, 2, 3);
                }
            }
        }); 
    })

    uploadify.php

    <?php
    $targetFolder = './Uploads/authorization'; 
    $verifyToken = md5('unique_salt' . $_POST['timestamp']);
    
    if (!empty($_FILES) && $_POST['token'] == $verifyToken) {
        $tempFile = $_FILES['Filedata']['tmp_name'];
        $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
    
        $fileTypes = array('doc','docx','pdf'); 
        $fileParts = pathinfo($_FILES['Filedata']['name']);
    
        $filename = $_SESSION['member']['mid'].'-'.date('Ymd-His').'-'.  mt_rand(0,1000).'.'.$fileParts['extension'];
        $targetFile = rtrim($targetPath,'/') . '/' . $filename;
    
        if (in_array($fileParts['extension'],$fileTypes)) {
            if(move_uploaded_file($tempFile,$targetFile)){
                $arr['code']= 1;
            }else{
                //上传失败
                $arr['code'] = 2;
                $arr['file_name'] = '';
            }
        } else {
            //文件类型错误
            $arr['code'] = 3;
            $arr['file_name'] = '';
        }
    }else{
        $arr['code'] = 4;
        $arr['file_name'] = '';
    }
    $arr['filename'] = $filename;
    exit(json_encode($arr));
  • 相关阅读:
    水壶-[Kruskal重构树] [解题报告]
    线性求逆元推导
    边界线与两端对齐
    左边竖条的实现方法
    $.ajax()知识
    area热点区域
    AJAX与XMLHttpRequest
    js运行机制
    优先级
    各种图形
  • 原文地址:https://www.cnblogs.com/dee0912/p/5013539.html
Copyright © 2020-2023  润新知