使用jQuery的文件上传在IE中不起作用

问题描述 投票:0回答:1

我在尝试使以下代码在IE中工作时遇到了困难。该代码可以在Firefox,Chrome和Edge中正常运行;但不是在IE中。我会忽略它无法在IE中运行,但它是工作中使用的默认浏览器。

编写该代码是为了将多个文件上传到特定的SharePoint文档库中。我从这篇文章中获得了代码https://social.msdn.microsoft.com/Forums/office/en-US/bb590f35-da1b-4905-baa0-fb85a275abf6/multiple-files-upload-in-document-library-using-javascript-object-model?forum=appsforsharepoint。这是最后一篇文章,在提到的浏览器中效果很好。任何有关如何使其在IE中工作的建议将不胜感激。预先谢谢你。

脚本在下面:

jQuery(document).ready(function() {

    fileInput = $("#getFile");
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', registerClick);
});

function registerClick() {
    //Register File Upload Click Event  
    jQuery("#addFileButton").on('click', readFile);
}
var arrayBuffer;

function readFile() {
    //Get File Input Control and read th file name  
    var element = document.getElementById("getFile");
    var fileCount = element.files.length;
    var filesUploaded = 0;
    for (var i = 0; i < fileCount; i++) {
        let file = element.files[i];
        var reader = new FileReader();
        reader._NAME = element.files[i].name
        reader.onload = function(e) {
            let fileactualName = e.target._NAME;
            uploadFile(e.target.result, fileactualName);
        }
        reader.onerror = function(e) {
            alert(e.target.error);
        }
        reader.readAsArrayBuffer(file);
    }
}

function uploadFile(arrayBuffer, fileName) {
    //Get Client Context,Web and List object.  
    var clientContext = new SP.ClientContext();
    var oWeb = clientContext.get_web();
    var oList = oWeb.get_lists().getByTitle('Comms Shared Files');
    //Convert the file contents into base64 data  
    var bytes = new Uint8Array(arrayBuffer);
    var i, length, out = '';
    for (i = 0, length = bytes.length; i < length; i += 1) {
        out += String.fromCharCode(bytes[i]);
    }
    var base64 = btoa(out);
    //Create FileCreationInformation object using the read file data  
    var createInfo = new SP.FileCreationInformation();
    createInfo.set_content(base64);
    createInfo.set_url(fileName);
    //Add the file to the library  
    var uploadedDocument = oList.get_rootFolder().get_files().add(createInfo)
    //Load client context and execcute the batch  
    clientContext.load(uploadedDocument);
    clientContext.executeQueryAsync(QuerySuccess, QueryFailure);
}

function QuerySuccess() {
    alert('File Uploaded Successfully.');
}

function QueryFailure(sender, args) {
    console.log('Request failed with error message - ' + args.get_message());
}
javascript jquery sharepoint-2010
1个回答
0
投票

在SharePoint 2010中,我们可以使用SharePoint设计器打开v4.master(defualt),并在“ X-UA兼容”中添加“ IE = 11”。

<meta http-equiv="X-UA-Compatible" content="IE=8,IE=11"/>

enter image description here

在SharePoint 2013/2016/2019 /在线中,我们可以使用REST API使用jQuery代码将文件上传到文档库。

<input id="inputFile" type="file" multiple="multiple"/>
<input id="uploadDocumentButton" type="Button" value="Upload Document">
<script src="https://code.jquery.com/jquery-1.12.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
var libraryTitle="DL";
$(function(){
    $("#uploadDocumentButton").click(function () {
        if (document.getElementById("inputFile").files.length === 0) {
            alert("Select a file!");
            return;
        }
        for(var i = 0; i < document.getElementById("inputFile").files.length; i++){         
            var file = document.getElementById("inputFile").files[i];
            uploadFileSync(libraryTitle, file.name, file);
        }
        alert("upload complete.");
    });     
});
function uploadFileSync(folderUrl, filename, file){
     var reader = new FileReader();
     reader.onloadend = function(evt){
         if (evt.target.readyState == FileReader.DONE){
             var buffer = evt.target.result;

             var completeUrl =_spPageContextInfo.webAbsoluteUrl
               + "/_api/web/GetFolderByServerRelativeUrl('"+folderUrl+"')/Files/add(url='" + filename + "',overwrite=true)";

            $.ajax({
                 url: completeUrl,
                 type: "POST",
                 data: buffer,
                 async: false,
                 processData: false,
                 headers: {
                     "accept": "application/json;odata=verbose",
                     "X-RequestDigest": $("#__REQUESTDIGEST").val(),
                     "content-length": buffer.byteLength
                 },
                 complete: function (data) {
                    //alert("upload complete.");
                    //console.log(data.responseJSON.d.ServerRelativeUrl);
                 },
                 error: function (err) {
                     alert('failed');
                 }
             });

        }
     };
     reader.readAsArrayBuffer(file);
}
</script>
© www.soinside.com 2019 - 2024. All rights reserved.