【问题标题】:How can i validate file type using ajax in codeigniter如何在 codeigniter 中使用 ajax 验证文件类型
【发布时间】:2015-10-22 09:31:10
【问题描述】:

我正在使用 Codeigniter,我面临一个问题,当他使用 ajax 将任何其他文件类型上传到服务器时,我必须向用户显示错误消息。我不想再次加载视图以显示错误消息。我的代码如下: 请帮我解决我的问题。'

查看:

function upload_video_Data(a)
{ 

        var fd = new FormData(document.getElementById('posting_comment_'+a));
        fd.append("file_m_id",a);
        var bar = $('.bar');
        var xhr = new XMLHttpRequest();        
        xhr.upload.addEventListener("progress", uploadProgress, false);

     xhr.onreadystatechange=function() {
       if (xhr.readyState==4 && xhr.status==200) {
        document.getElementById("nameTest").value=xhr.responseText;
        }
      }   
        xhr.open("POST", "Dashboard/do_upload_video");
        xhr.send(fd);

        function uploadProgress(evt) {
            if (evt.lengthComputable) {
            var percentComplete = Math.round(evt.loaded * 100 / evt.total);
            document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';
            $("#status").animate( { width: percentComplete.toString()+"%"}, 5);
            }
        }
}

控制器:

public function do_upload_video()
    {  
      $lecture_id=$_POST['file_m_id'];
      $output_dir = "./uploads/";
      $fileName = $_FILES["save_movie_".$lecture_id]["name"];

if(!move_uploaded_file($_FILES["save_movie_".$lecture_id]["tmp_name"],$output_dir.$fileName))
{
echo '0';
}
else
{
echo '1';
}
    }

【问题讨论】:

    标签: php jquery ajax codeigniter codeigniter-2


    【解决方案1】:

    在您的 ajax 之前使用此代码来验证文件的扩展名

    var ext = $('#my_file_id').val().split('.').pop().toLowerCase();
        if($.inArray(ext, ['gif','png','jpg','jpeg']) == -1) {
            alert('invalid extension!');
        }
    

    现在您的代码如下所示

    function upload_video_Data(a)
    { 
    
       var ext = $('#my_file_id').val().split('.').pop().toLowerCase();
    if($.inArray(ext, ['gif','png','jpg','jpeg']) == -1) {
        return false;
    }
    
    
            var fd = new FormData(document.getElementById('posting_comment_'+a));
            fd.append("file_m_id",a);
            var bar = $('.bar');
            var xhr = new XMLHttpRequest();        
            xhr.upload.addEventListener("progress", uploadProgress, false);
    
         xhr.onreadystatechange=function() {
           if (xhr.readyState==4 && xhr.status==200) {
            document.getElementById("nameTest").value=xhr.responseText;
            }
          }   
            xhr.open("POST", "Dashboard/do_upload_video");
            xhr.send(fd);
    
            function uploadProgress(evt) {
                if (evt.lengthComputable) {
                var percentComplete = Math.round(evt.loaded * 100 / evt.total);
                document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';
                $("#status").animate( { width: percentComplete.toString()+"%"}, 5);
                }
            }
    }
    

    【讨论】:

    • 感谢 Ricky 的回答。我想在上面的代码中清除一件事,我使用了 XMLHttpRequest,在此代码中,我们将返回来自控制器的响应。我正在使用此代码,但它不起作用 xhr.onreadystatechange=function() { if (xhr.readyState==4 && xhr.status==200) { document.getElementById("nameTest").value=xhr.responseText; } }
    • 我已经更新了我的代码,我想将这些0和1返回给xmlhttprequest函数,我们该怎么做。
    • 在您的函数 upload_video_Data(a) 中写入此代码并在验证失败时更新输入文件的 ID 添加 return false 代替 alert('invalid extension!');
    • 我会从 xhr.responseText 中的控制器获得 1 还是 0 响应;
    • 我在 ext 变量中得到空白值。
    猜你喜欢
    • 2011-02-10
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多