我有一个包含两个输入字段的表单,一个type=file
和另一个type=text
。
我想:
type=file
字段的文件
upload dir/file_name
插入type=text
字段文件上传得很好。问题是我得到file name
错误,取决于我正在使用的浏览器。
somepath/file_name.ext
somepath/C:\Users\User\Desktop\file_name.ext
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>
答案 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']);
这样的文件数据,你会明白你需要的吗?