我正在尝试通过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
}
参考方案
您可以使用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);
});
};
网络API:
[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);
}
}
重复使用Google Api Bearer令牌来访问用户的云端硬盘 - javascript我有以下几点: gapi.auth.authorize( { client_id: CLIENT_ID, scope: SCOPES, immediate: false }, handleAuthResult); 这使我可以访问access_token:目标是使该应用程序的用户可以授予对我的应用程序的访问权限,以使用其Google驱动器存储其内容。我需要能够…
在Google云端硬盘中生成第三方应用文件预览的最佳方法? - javascriptGoogle云端硬盘小组最近宣布,第三方云端硬盘应用可以提供自己的缩略图作为文件预览(http://googleappsdeveloper.blogspot.com/2012/10/thumbnails-for-your-custom-file-types.html)。对您来说最简单的方法是什么?我们的应用程序在前端使用AngularJS,在后端使用Pyth…
PHP应用程序,显示用户有多少个Facebook通知 - javascript我正在为基于Chromium的应用程序创建接口,但遇到了问题。我想直接在我的网站上显示我的Facebook通知数量(这些白色数字在红色矩形中)。可能吗?我在Google上找不到任何东西。它看起来应该像:Patrick有5条新通知。编辑:现在我有了这个:$request = new FacebookRequest( $session, 'GET…
从Javascript调用PUT方法 - javascript我正在尝试从javascript调用C#Web API,但数据似乎传递不正确。我使用的GET方法工作得很好,但是我似乎无法按预期的那样使PUT工作。结构如下:Javascript:$.ajax({ type: "PUT", url: "/api/FTP", data: "Hello World" }…
C#Google Maps api-HTML部分的javascript错误 - javascript我最近想使用googlemap API在带有Visual Studio的简单C#Windows窗体中在地图上显示一些标记。我使用“网络浏览器”组件来显示生成的html文件,其中包含来自google的基本html代码以及自定义坐标。 const string htmlPath = "D:/map.html"; StreamWriter sw…