【问题标题】:Upload a file with specific filename上传具有特定文件名的文件
【发布时间】:2016-05-27 07:11:40
【问题描述】:

为了让我在上传之前轻松浏览正确的文件,这是我想要完成的。该怎么做?

我的输入代码: 表单内部有两个输入。并具有可能相似的文件名。提交按钮将触发“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>";
      }
    }
}

【问题讨论】:

  • 目前还不清楚您要达到的目标。您是否正在寻找仅显示具有给定文件名的文件的客户端解决方案?或者如果它们与文件名不匹配,您是否试图禁止上传服务器端?
  • @hypeJunction 你说的都是。如果客户端解决方案是不可能的,也许我会寻找服务器端的方法。

标签: php function file file-upload fileopendialog


【解决方案1】:

我相信您无法在客户端预设文件名,但您可以在输入中使用accept 属性来限制接受的文件类型(认为很难预测.txt 附带的所有mime 类型):

&lt;input type="file" accept="text/plain"&gt;

或更笼统的

&lt;input type="file" accept="text/*"&gt;

虽然这不是一个防弹的解决方案,但您可能会破坏浏览器。

您可以实现一个 JavaScript 解决方案,该解决方案将侦听输入更改并验证文件名。

要在服务器端执行此操作,只需检查 $_FILES[$input_name]['name'] 的值(或 $_FILES[$input_name][$index]['name'] 以获取具有 multiple 属性的文件输入)

$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
    }
}

【讨论】:

    猜你喜欢
    • 2016-07-26
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多