0

我正在使用 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

4

1 回答 1

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>

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

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

于 2013-09-18T02:48:23.317 回答