在MVC 4中浏览文件上传程序后获取所选文件

时间:2014-01-15 10:07:59

标签: ajax asp.net-mvc-4 jquery

我正在使用ASP .Net MVC 4.0,RazorView,C#,VS2010。

我有一个html输入类型='文件'。任务是将文件复制到某个目录,而用户将从文件浏览器中选择该文件。

如果我获得完整的文件路径,那可以解决问题。但是谷歌搜索了3个多小时后我失败了。

如果我使用jQuery / Javascript获取文件并使用ajax发送到服务器端,那么它也可以解决。

我双双都失败了。以下是我的一些代码:

function checkFileType() {
    var input = document.getElementById('IDbtnUpload');
    var selected_file = document.getElementById('IDbtnUpload').files[0];

    if (input.value != "") {
        document.getElementById('lblFile').innerHTML = "";
        var file = input.value;
        document.getElementById('hiddenFileName').value = file.toString();
        if ((file.lastIndexOf('xls') == file.length - 3) || (file.lastIndexOf('xlsx') == file.length - 4) || (file.lastIndexOf('csv') == file.length - 3)) {
            alert(file.toString());
            var url = '@Url.Action("ProcessExcel", "NeuGesellschaft")';
            $.post(url, { x: selected_file }, function (data) {
                //$('#textareaReadonly').val(data);
                alert(data);
            });
        }
        else {
            document.getElementById('lblFile').innerHTML = "Incorrect File Format. Please browse an excel/csv file!";
            alert('Incorrect File Format. Please upload an excel/csv file!');
        }
    }
}

我尝试使用 $。post 将文件发送到我的服务器端方法。

如果有人建议如何发送文件或如何获取完整的文件名(其中任何一个都会被评估),那将有助于我。

编辑1:

    public string ProcessExcel(object formData)
    {

        return "";
    }

我的参数的数据类型是什么?

1 个答案:

答案 0 :(得分:1)

$.post(url, { x: selected_file }, function (data) {只会发送{x : "[object FileList]"},因为文件[0]将返回FileList。如果要发送文件内容,则需要使用FormData(使用jQuery):

var fileInputNode = document.getElementById('IDbtnUpload');
var file = fileInputNode.files[0];
var url = '@Url.Action("ProcessExcel", "NeuGesellschaft")';
var xhr = new XMLHttpRequest();
var formData = new window.FormData();

formData.append(fileInputNode.name, file);
xhr.open('POST', url);
xhr.send(formData);

此外,您可以使用jQuery File Upload plugin进行文件上传。