PHP使用jquery和PHP在用户请求上重命名或替换上传的文件

时间:2015-07-16 06:29:57

标签: javascript php jquery file-upload

我正在开发一个PHP应用程序,我必须在服务器上上传多个文件,我想要的是,当用户上传多个文件时,系统应该检查是否已经存在任何文件,如果是,则应该询问用户是否重命名文件或替换旧文件,如果用户选择重命名选项,则应重命名该文件,如果用户要求替换该文件,则应相应地进行。

直到现在我使用以下代码上传文件:

<?php
if(isset($_FILES['files'])){
$errors= array();
     foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
    $file_name = $_FILES['files']['name'][$key];
$file_size =$_FILES['files']['size'][$key];
$file_tmp =$_FILES['files']['tmp_name'][$key];
$file_type=$_FILES['files']['type'][$key];  
if($file_size > 2097152){
    $errors[]='File size must be less than 2 MB';
}       
 //   $query="INSERT into upload_data (`USER_ID`,`FILE_NAME`,`FILE_SIZE`,`FILE_TYPE`) VALUES('$user_id','$file_name','$file_size','$file_type'); ";
$desired_dir="../reztrictedfolder/dir1/";
if(empty($errors)==true){
    if(is_dir($desired_dir)==false){
        mkdir("$desired_dir", 0700);        // Create directory if it does not exist
    }
    if(file_exists("$desired_dir/".$file_name)==false){
        move_uploaded_file($file_tmp,"../reztrictedfolder/dir1/".$file_name);
    }else{                                  //rename the file if another one exist

         //rename($file_tmp,$new_dir) ; 
        list($txt,$ext) = explode(".", $file_name);

        $actual_image_name = time().substr(str_replace(" ", "_", $txt),     5).".".$ext;
     $new_dir="../reztrictedfolder/dir1/".$actual_image_name."_copy";
        move_uploaded_file($file_tmp,$new_dir);              
    }
  //  mysql_query($query);          
}else{
       // print_r($errors);
}

但它只检查文件是否已经存在并重命名,但我想让用户知道该文件已存在,是否要重命名文件或替换现有文件..?

1 个答案:

答案 0 :(得分:0)

如果您使用AJAX,那么您从PHP响应发送到JavaScript,其中包含文件列表。我使用函数angular.module('myModule').service('myCustomService',myCustomService); function myCustomService($location, $q){ // some logic } 作为文件的参数列表。在javascript中使用json_encode

HTML部分

JSON.parse()

的JavaScript

<form id="upload" action="upload.php" method="POST" enctype="multipart/form-data">

<fieldset>
<input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="300000" />
<div>
    <label for="fileselect">Files to upload:</label>
    <input type="file" id="fileselect" name="fileselect[]" multiple="multiple" />
    <div id="filedrag">or drop files here</div>
</div>

<div id="submitbutton">
    <button type="submit">Upload Files</button>
</div>

</fieldset>

</form>

PHP

function FileSelectHandler(e) {
    var files = e.target.files || e.dataTransfer.files;

    for (var i = 0, f; f = files[i]; i++) {
        UploadFile(f);
    }

}

function ResponseParse(data) {
     if (typeof data === "object") {
         for (var i = 0, lng = data.files.length; i < lng; i++) console.log(data.files[i]);
     }
}

function UploadFile(file) {
    var xhr = new XMLHttpRequest();
    // for example only jpeg file allowed
    if (xhr.upload && file.type == "image/jpeg" && file.size <= $id("MAX_FILE_SIZE").value) {
        xhr.open("POST", $id("upload").action, true);
        xhr.setRequestHeader("X_FILENAME", file.name);
        xhr.onreadystatechange = function() {//Call a function when the state changes.
            if(http.readyState == 4 && http.status == 200) {
                // Response from server
                var data = JSON.parse(http.responseText);
                ResponseParse(data);
            }
        }
        xhr.send(file);

    }

}

此示例使用XMLHttpRequest2。支持的浏览器列表http://caniuse.com/#feat=xhr2。如果您支持旧版浏览器,则必须使用旧版表单样式上传或iframe上传jquery,例如https://blueimp.github.io/jQuery-File-Upload/