javascript - 将对象从 JavaScript 传递到 Web API 时出现问题

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

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

最佳答案

字符串化数组缓冲区不会为您提供任何有用的数据。
我还相信 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');
        }

    });

}

关于javascript - 将对象从 JavaScript 传递到 Web API 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33749638/

相关文章:

javascript - 通过 AJAX 加载更多文件

php - 通过 ajax 使用 javascript 和 php 来运行 MySQL 查询

javascript - 关于 Ajax 成功重新加载表

javascript - 如何使用 Ajax 和 jQuery 传递两个不同选择标签的值以进行处理?

html - 为什么子菜单不与其父菜单右侧对齐?

javascript - 获取 TinyMCE 打印事件

javascript - 具有不透明度的滚动背景 View 框的羽化边缘

javascript - CSS/JS 滚动一个较低的 z-index div

javascript - 用javascript生成菜单?

javascript - 提交禁用输入的表单