我尝试使用FileReader对象将文件上传到文档库,但没有这样做,因为文件是以错误的编码上传的。
这是代码
$("#file").kendoUpload({
async: {
saveUrl: "save",
autoUpload: true
},
upload: function (e) {
$.each(e.files, function () {
var file = this.rawFile;
var reader = new FileReader();
reader.onload = function (e) {
var data = reader.result;
var soapEnv =
"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='ht
<soap:Body>\
<CopyIntoItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>\
<SourceUrl>" + file.name + "</SourceUrl>\
<DestinationUrls>\
<string>"+GetHostname() + folder + "/" + file.name + "</string>\
</DestinationUrls>\
<Fields>\
<FieldInformation Type='Text' DisplayName='Title' InternalName='Title' Value='"+ file.name + "' />\
</Fields>\
<Stream>" +window.btoa(data) + "</Stream>\
</CopyIntoItems>\
</soap:Body>\
</soap:Envelope>";
$.ajax({
url: "/documents/_vti_bin/copy.asmx",
beforeSend: function (xhr) { xhr.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/CopyIntoItems"); },
type: "POST",
dataType: "xml",
data: soapEnv,
contentType: "text/xml; charset=\"utf-8\""
}).then(function (data, status) {
var itemUrl = xmlToJSON(data).Envelope.Body.CopyIntoItemsResponse.Results.CopyResult._DestinationUrl;
return documentsUtilities.checkIn(itemUrl);
})
.then(function(res){
//notifiy user and automatically reload the grid
});
};
});
e.preventDefault();
}
我面临的问题是肥皂串本身。
将该数据传递为<Stream>" +window.btoa(data) + "</Stream>
会导致文件上传,其内容为base64编码。图像为黑色,文本文件不可读。
使用<Stream>" + data + "</Stream>\
传递数据对象本身会导致错误的请求。
使用FileReader API将文件上传到SharePoint 2010上的文档库的正确方法是什么?
答案 0 :(得分:0)
FileReader API结果是一个base64编码的字符串,带有一些开销,指定实际的文件类型。如果pdf文件看起来像这样:
data:application/pdf;base64,JVBERi0xLjQKJdP0zOEKMSAwIG9iago8PAovQ3JlYXRpb25EYXRlKEQ6MjAxNzA5MjcxNTMz....
删除开头的位,包括base64之后的逗号就是让SharePoint满意所需的全部内容:
<Stream>" + data.replace(/^.*base64,/, '') + "</Stream>\
我现在已经在jpg,png,xlsx,docx,pdf和js文件上对此进行了测试。像魅力一样。