【问题标题】:Passing file object to Web API from Javascript从 Javascript 将文件对象传递给 Web API
【发布时间】:2016-02-18 12:49:51
【问题描述】:

我正在尝试通过来自 Javscript web api 调用的 web api 将文件从本地机器上传到共享点。试图将文件对象从 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] // This is from System.Web.Http, and not from System.Web.Mvc
    public void UploadFileToDocmentLibrary(HttpPostedFile uploadFile)
    {
//code to upload to sharepoint
}

【问题讨论】:

    标签: javascript c# file sharepoint asp.net-web-api


    【解决方案1】:

    您可以使用FormData上传整个文件

    JS:

    $scope.uploadDocs = function () {
        var element = document.getElementById("uploadInput");
        var file = element.files[0];
    
        var loFormData = new FormData();
        loFormData.append("filename", file.name);
        loFormData.append("file", file);
    
        var loAjaxRequest = $.ajax({
            cache: false,
            type: 'POST',
            url: webApiUrl + "api/Registration/UploadFileToDocmentLibrary",
            contentType: false,
            processData: false,
            data: loFormData
        });
    
        loAjaxRequest.done(function (xhr, textStatus) {
            alert(textStatus);
        });
    };
    

    网络接口:

    [HttpPost]
    public async Task<HttpResponseMessage> UploadFileToDocmentLibrary()
    {
        if (!this.Request.Content.IsMimeMultipartContent())
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        try
        {
            var loProvider = new MultipartFormDataStreamProvider(Path.GetTempPath());
    
            await Request.Content.ReadAsMultipartAsync(loProvider);
    
            string lsFilename = loProvider.FormData.GetValues("filename").First();
            var loFile = loProvider.FileData.First();
            string lsFileContent = File.ReadAllText(loFile.LocalFileName);             
    
            return new HttpResponseMessage(HttpStatusCode.OK);
        }
        catch (Exception exp)
        {
            return this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exp);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 2016-12-20
      相关资源
      最近更新 更多