我正在开发一个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);
}
但它只检查文件是否已经存在并重命名,但我想让用户知道该文件已存在,是否要重命名文件或替换现有文件..?
答案 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/