如何在post请求中仅发送文件名而不是文件路径

时间:2013-09-17 23:59:08

标签: javascript html ajax

我正在使用IE9和jquery1.8。我正在使用ajaxForm发出POST请求。表单仅包含一个文件输入字段。它发送POST请求,如下所示,

-----------------------------7dd2d50120f76
Content-Disposition: form-data; name="myFile"; filename="C:\Images\myfile.jpg"
Content-Type: text/plain

在日志中,文件名包含文件路径。我正在尝试传递仅文件名而不是路径。有什么方法可以实现这个目标吗?

修改 我检查了IE 8,它只发送文件名而不是文件路径。此文件路径正在破坏仅期望文件名的服务器代码。想知道应该有一些属性或需要设置的东西或IE9有一些与此相关的变化。

谢谢, JDP

1 个答案:

答案 0 :(得分:1)

在IE中,如果站点不在受信任区域,则它是一种安全功能。在其他浏览器中,如果您绝对必须在客户端上执行此操作(我仍然认为在服务器上解析名称是一个更好的选项) - 您必须将“仅名称”保存到单独的隐藏字段中,然后在服务器上读取该字段:

<form onsubmit = "getFileName()">
    <input type="file" id="fu"/>
    <input type="hidden" id="hdFileName" />
    <input type="submit" />
</form>

<script>
    function getFileName() {
        var hid = document.getElementById("hdFileName");
        var fullName = document.getElementById("fu").value;

        var sep = fullName.lastIndexOf("\\"); 
        if (sep == -1)
            hid.value = fullName;
        else
            hid.value = fullName.substring(sep + 1, fullName.length);

        // Testing
        alert(hid.value);

    }
</script>

此代码在表单提交时触发,并检查filename是否包含“\”字符。如果是 - 它只读取文件名部分(如果没有 - 它只是文件名)并将其存储到隐藏变量中。

演示:http://jsfiddle.net/wKvGP/