0

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

我想:

  1. type=file使用 php 选择要上传的带有字段的文件
  2. 获取正在上传的文件的文件名
  3. 插入字段upload dir/file_name_type=text

文件上传正常。问题是我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>
4

3 回答 3

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);

演示

解决方案 2:

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

演示

解决方案3:

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

演示

于 2013-06-21T01:59:47.940 回答
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

于 2013-06-21T02:59:36.480 回答
0

"$_FILES["data_up"]["name"]" 总是只给出文件名。

首先调试代码一次只需尝试打印文件数据,就像print_r ($_FILES['data_up']);您了解您需要什么一样?

于 2013-06-21T03:18:16.700 回答