获取正在上载的文件的文件名,并将其写入文本字段

时间:2013-06-21 01:40:12

标签: php jquery html

我有一个包含两个输入字段的表单,一个type=file和另一个type=text

我想:

  1. 使用php
  2. 选择要上传type=file字段的文件
  3. 抓取正在上传的文件的文件名
  4. upload dir/file_name插入type=text字段
  5. 文件上传得很好。问题是我得到file name错误,取决于我正在使用的浏览器。

    • Firefox 工作正常,我得到:somepath/file_name.ext
    • IE(10)为我提供完整的本地文件路径:somepath/C:\Users\User\Desktop\file_name.ext
    • Chrome 变得可爱并返回:somepath/C:\fakepath\file_name.ext

    我该如何解决这个问题?我需要 file_name.ext,就像Firefox一样。毋庸置疑,我需要检测文件名,并在选择文件时和提交表单之前更改相应的文本字段。

    HTML部分:

    <form enctype="multipart/form-data" action="" method="post">
      <input name="data_up" id="data_up" type="file" /><br>
      <input name="data" id="data" type="text" value="<?php if(isset($_POST['submit'])) { echo $_POST['data']; } ?>" />
      <button name="submit" type="submit">Submit</button>
    </form>
    

    PHP部分(简化,需要添加安全性):

    if (isset($_POST['submit'])) {
      if ($_FILES["data_up"]["error"] == 0) {
        move_uploaded_file($_FILES["data_up"]["tmp_name"], "somepath/".$_FILES["data_up"]["name"]);
      }
    }
    

    JS部分:

    <script type="text/javascript">
    $(function() {
      $('#data_up').change(function () {
        var fileName = $(this).val();
        $('#data').val('somepath/'+fileName);
      });
    });
    </script>
    

3 个答案:

答案 0 :(得分:2)

只提取最后一个斜杠之前的最后一个字符串..在你的情况下,v是返回的内容,x是你想要的

var v = 'some\\thing\\text.txt';
var x ='';
for(i=v.length-1;i>=0;i--)
  if(v[i]!='/' && v[i]!='\\')
    x = v[i]+x;
  else 
    break;
console.log(x);

<强> Demo

解决方案2:

var v = 'some/thing/text.txt';
var y = v.split(/[\\\/]/);
var x = y[y.length-1];
console.log(x);

<强> Demo

解决方案3:

var v = 'vava\\text.txt';
console.log(v.replace(/.*[\\\/]/g,''));

<强> Demo

答案 1 :(得分:0)

您要查找的方法是basename()

所以你的代码看起来像是:

move_uploaded_file($_FILES["data_up"]["tmp_name"], "somepath/".basename($_FILES["data_up"]["name"]));

可以在此处找到PHP文档中的示例:http://ca1.php.net/manual/en/function.basename.php

答案 2 :(得分:0)

“$ _ FILES [”data_up“] [”name“]”始终只提供文件名。

首先调试一次代码只是尝试打印像print_r ($_FILES['data_up']);这样的文件数据,你会明白你需要的吗?