2016-05-27 4 views
0

Pour que je puisse facilement parcourir le bon fichier avant de le télécharger, voici ce que je veux accomplir. Comment faire ça?Télécharger un fichier avec un nom de fichier spécifique

look like this

Mes codes d'entrée: intérieur de la forme sont deux entrées. Et avec un nom de fichier similaire probable. Le bouton Envoyer déclenchera la fonction "uploadnow".

<td>UPLOAD#1: AGL_001.txt <input type="file" name="upload1" id="upload1"></td> 
<td>UPLOAD#2: AGL_0001.txt <input type="file" name="upload2" id="upload2"></td> 

function uploadnow(){ 
    $allowed_upload1 = ['AGL_001.txt']; // added 
    $allowed_upload2 = ['AGL_0001.txt']; //added 

    if(isset($_FILES['upload1']['name'])){ 
     //$errors= array(); 
     $file_name = $_FILES['upload1']['name']; 
     $file_size =$_FILES['upload1']['size']; 
     $file_tmp =$_FILES['upload1']['tmp_name']; 
     $file_type=$_FILES['upload1']['type']; 
     $file_ext=strtolower(end(explode('.',$_FILES['upload1']['name']))); 
     //$img_loc = $file_name.'.'.$file_ext; 


     if (in_array($file_name, $allowed_upload1)) { 
     move_uploaded_file($file_tmp,"uploads/".$file_name); 
     } else { 
     $message = "Sorry, wrong filename on UPLOAD#1"; 
     echo "<script type='text/javascript'>alert('$message');</script>"; 
     } 
    } 

    if(isset($_FILES['upload2']['name'])){ 
     //$errors= array(); 
     $file_name = $_FILES['upload2']['name']; 
     $file_size =$_FILES['upload2']['size']; 
     $file_tmp =$_FILES['upload2']['tmp_name']; 
     $file_type=$_FILES['upload2']['type']; 
     $file_ext=strtolower(end(explode('.',$_FILES['upload2']['name']))); 
     //$img_loc = $file_name.'.'.$file_ext; 

     if (in_array($file_name, $allowed_upload2)) { 
      move_uploaded_file($file_tmp,"uploads/".$file_name); 
     } else { 
      $message = "Sorry, wrong filename on UPLOAD#2"; 
      echo "<script type='text/javascript'>alert('$message');</script>"; 
     } 
    } 
} 
+0

Ce n'est pas vraiment clarifiez ce que vous essayez d'accomplir. Êtes-vous à la recherche d'une solution côté client pour afficher uniquement un fichier avec un nom de fichier donné? Ou essayez-vous d'interdire le téléchargement côté serveur si elles ne correspondent pas au nom de fichier? – hypeJunction

+0

@hypeJunction Les deux de ce que vous avez dit. Si la solution côté client n'est pas possible, peut-être que je rechercherai la méthode côté serveur. –

Répondre

0

Je crois que vous ne pouvez pas prérégler le nom de fichier côté client, mais vous pouvez limiter les types de fichiers acceptés avec accept attribut sur votre entrée (pensé qu'il est difficile de prévoir tous les types MIME .txt est livré avec):

<input type="file" accept="text/plain">

ou plus général

<input type="file" accept="text/*">

Bien que ce n'est pas une solution pare-balles et vous pouvez encrasser le navigateur.

Vous pouvez implémenter une solution JavaScript, qui va écouter les changements d'entrée et valider le nom de fichier.

Pour ce faire côté serveur, il suffit de vérifier la valeur de $_FILES[$input_name]['name'] (ou $ _FILES [$ nom_entrée] [$ index] [ 'nom'] pour une entrée de fichier avec multiple attribut)

$allowed_filenames = [ 
    'AGL_001.txt', 
]; 

if(isset($_FILES['upload1']['name'])){ 
    //$errors= array(); 
    $file_name = $_FILES['upload1']['name']; 
    $file_size =$_FILES['upload1']['size']; 
    $file_tmp =$_FILES['upload1']['tmp_name']; 
    $file_type=$_FILES['upload1']['type']; 
    $file_ext=strtolower(end(explode('.',$_FILES['upload1']['name']))); 
    //$img_loc = $file_name.'.'.$file_ext; 

    if (in_array($file_name, $allowed_filenames)) { 
     move_uploaded_file($file_tmp,"uploads/".$file_name); 
    } else { 
     // log an error 
    } 
} 
+0

Pourquoi le fichier est toujours en cours de téléchargement? Voir mes modifications. –