【问题标题】:The Valums Fileupload issues in IE9 - PHP ?IE9 - PHP 中的 Valums Fileupload 问题?
【发布时间】:2012-06-12 17:47:27
【问题描述】:

我正在努力使用 Valumx 出色的文件上传。我已经使用它几年了,直到最近才意识到它在 IE9 中不起作用。

我在这里找到了几个答案,但似乎无法弄清楚如何在我的 PHP 项目中实现它。

这里应该有答案:Valums file-uploader doesn't work under Internet Explorer 9

但我不知道该把什么放在哪里,才能让它发挥作用。

谁能帮我写一个Valums+IE9+PHP-for-dummies?

【问题讨论】:

  • 您使用的是最新版本吗?

标签: php file-upload internet-explorer-9


【解决方案1】:

这似乎是 IE 缓存问题,如果您使用的是 Ajax 和 GET,请在 Ajax 参数的 get 参数中添加时间戳值,这样可以做到:

$.ajax({
  url : "http:'//myexampleurl.php' + '?ts=' + new Date().getTime(),
  dataType: "json",
  contentType: "application/json; charset=utf-8", 
  .
  .
  //more stuff

【讨论】:

    【解决方案2】:

    当你从 GitHub 下载 Valums File Uploader 包时,你还会发现这个包带有a PHP example,我在这里转储:

    <?php
    
    /**
     * Handle file uploads via XMLHttpRequest
     */
    class qqUploadedFileXhr {
        /**
         * Save the file to the specified path
         * @return boolean TRUE on success
         */
        function save($path) {    
            $input = fopen("php://input", "r");
            $temp = tmpfile();
            $realSize = stream_copy_to_stream($input, $temp);
            fclose($input);
    
            if ($realSize != $this->getSize()){            
                return false;
            }
    
            $target = fopen($path, "w");        
            fseek($temp, 0, SEEK_SET);
            stream_copy_to_stream($temp, $target);
            fclose($target);
    
            return true;
        }
        function getName() {
            return $_GET['qqfile'];
        }
        function getSize() {
            if (isset($_SERVER["CONTENT_LENGTH"])){
                return (int)$_SERVER["CONTENT_LENGTH"];            
            } else {
                throw new Exception('Getting content length is not supported.');
            }      
        }   
    }
    
    /**
     * Handle file uploads via regular form post (uses the $_FILES array)
     */
    class qqUploadedFileForm {  
        /**
         * Save the file to the specified path
         * @return boolean TRUE on success
         */
        function save($path) {
            if(!move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)){
                return false;
            }
            return true;
        }
        function getName() {
            return $_FILES['qqfile']['name'];
        }
        function getSize() {
            return $_FILES['qqfile']['size'];
        }
    }
    
    class qqFileUploader {
        private $allowedExtensions = array();
        private $sizeLimit = 10485760;
        private $file;
    
        function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760){        
            $allowedExtensions = array_map("strtolower", $allowedExtensions);
    
            $this->allowedExtensions = $allowedExtensions;        
            $this->sizeLimit = $sizeLimit;
    
            $this->checkServerSettings();       
    
            if (isset($_GET['qqfile'])) {
                $this->file = new qqUploadedFileXhr();
            } elseif (isset($_FILES['qqfile'])) {
                $this->file = new qqUploadedFileForm();
            } else {
                $this->file = false; 
            }
        }
    
        private function checkServerSettings(){        
            $postSize = $this->toBytes(ini_get('post_max_size'));
            $uploadSize = $this->toBytes(ini_get('upload_max_filesize'));        
    
            if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit){
                $size = max(1, $this->sizeLimit / 1024 / 1024) . 'M';             
                die("{'error':'increase post_max_size and upload_max_filesize to $size'}");    
            }        
        }
    
        private function toBytes($str){
            $val = trim($str);
            $last = strtolower($str[strlen($str)-1]);
            switch($last) {
                case 'g': $val *= 1024;
                case 'm': $val *= 1024;
                case 'k': $val *= 1024;        
            }
            return $val;
        }
    
        /**
         * Returns array('success'=>true) or array('error'=>'error message')
         */
        function handleUpload($uploadDirectory, $replaceOldFile = FALSE){
            if (!is_writable($uploadDirectory)){
                return array('error' => "Server error. Upload directory isn't writable.");
            }
    
            if (!$this->file){
                return array('error' => 'No files were uploaded.');
            }
    
            $size = $this->file->getSize();
    
            if ($size == 0) {
                return array('error' => 'File is empty');
            }
    
            if ($size > $this->sizeLimit) {
                return array('error' => 'File is too large');
            }
    
            $pathinfo = pathinfo($this->file->getName());
            $filename = $pathinfo['filename'];
            //$filename = md5(uniqid());
            $ext = $pathinfo['extension'];
    
            if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){
                $these = implode(', ', $this->allowedExtensions);
                return array('error' => 'File has an invalid extension, it should be one of '. $these . '.');
            }
    
            if(!$replaceOldFile){
                /// don't overwrite previous files that were uploaded
                while (file_exists($uploadDirectory . $filename . '.' . $ext)) {
                    $filename .= rand(10, 99);
                }
            }
    
            if ($this->file->save($uploadDirectory . $filename . '.' . $ext)){
                return array('success'=>true);
            } else {
                return array('error'=> 'Could not save uploaded file.' .
                    'The upload was cancelled, or server error encountered');
            }
    
        }    
    }
    
    // list of valid extensions, ex. array("jpeg", "xml", "bmp")
    $allowedExtensions = array();
    // max file size in bytes
    $sizeLimit = 10 * 1024 * 1024;
    
    $uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
    $result = $uploader->handleUpload('uploads/');
    // to pass data through iframe you will need to encode all html tags
    echo htmlspecialchars(json_encode($result), ENT_NOQUOTES);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-14
      • 2011-09-13
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多