0

type=fileoneと other の2 つの入力フィールドを持つフォームがありますtype=text

私はしたいと思います:

  1. type=filePHPを使用してアップロードするフィールドを持つファイルを選択します
  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

どうすればこれを解決できますか? Firefoxのようにだけが必要です。file_name.ext言うまでもなく、ファイルが選択され、フォームが送信される前に、ファイル名を検出し、適切なテキスト フィールドを変更する必要があります。

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 に答える