【问题标题】:Problems passing object from JavaScript to Web API将对象从 JavaScript 传递到 Web API 的问题
【发布时间】:2016-02-18 09:26:02
【问题描述】:

我正在尝试使用 JavaScript 到 ASP.NET MVC Web API 调用将文件从本地计算机上传到 SharePoint。在尝试将文件对象从 JavaScript 传递到 Web API 时,我不断收到类型错误、找不到资源等错误。有人可以帮忙吗?

JavaScript 代码:

$scope.Upload = function () {
    if (!window.FileReader) {
        alert("This browser does not support the HTML5 File APIs");
        return;
    }

    var element = document.getElementById("uploadInput");
    var file = element.files[0];
    //var folderStructure = "/PublishingImages/Lists/Featured%20Stories/";
    var parts = element.value.split("\\");
    var fileName = parts[parts.length - 1];
    filename1 = fileName;
    var descriptionName = fileName;
    var reader = new FileReader();
    var indentifier = '';

    //url = encodeURI(url);
    reader.onload = function (e) {
        UploadDocs(e.target.result, fileName);
    }
    reader.onerror = function (e) {
        alert(e.target.error);
    }
    reader.readAsArrayBuffer(file);

}

function UploadDocs(str, file) {
    var url = webApiUrl + "api/Registration/UploadFileToDocmentLibrary";
    $.ajax({
        type: "POST",
        url: url,
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(str),
        dataType: 'json',
        async: false,

        success: function (response) {
            console.log(response.fileData);
            console.log('Success');
        },
        error: function (data) {
            console.log('fail');
        }

    });
}

Web API 代码:

    [HttpPost]
    public void UploadFileToDocmentLibrary(HttpPostedFile uploadFile)
    {
     //code to upload to sharepoint
    }

【问题讨论】:

    标签: javascript ajax html file-upload asp.net-web-api


    【解决方案1】:

    对数组缓冲区进行字符串化不会为您提供任何有用的数据。
    我也相信 HttpPostedFile 期望文件为 multipart/formdata 而不是 json。
    所以你应该使用 FormData 对象来实现这一点。

    $scope.Upload = function () {
        if (!window.FormData) {
            alert("This browser does not support the HTML5 XH2 APIs");
            return;
        }
    
        var element = document.getElementById("uploadInput");
        var file = element.files[0];
        var formdata = new FormData();
        formdata.append(element.name, file);
    
        var url = webApiUrl + "api/Registration/UploadFileToDocmentLibrary";
        $.ajax({
            type: "POST",
            url: url,
            contentType: false,
            processData: false,
            data: formdata,
            dataType: 'json',
            async: false,//WHY :(
    
            success: function (response) {
                console.log(response.fileData);
                console.log('Success');
            },
            error: function (data) {
                console.log('fail');
            }
    
        });
    
    }
    

    【讨论】:

    • 谢谢!我明天试试这个。此外,我还尝试在 C# 代码中传递 anobject 作为参数类型,但它仍然引发类型异常。既然我相信 object 可以接受任何东西,你知道它为什么不工作吗?
    猜你喜欢
    • 2016-02-18
    • 2018-03-12
    • 1970-01-01
    • 2017-04-28
    • 2017-03-09
    • 1970-01-01
    • 2016-01-16
    • 2019-05-28
    • 2017-05-26
    相关资源
    最近更新 更多