文件上传(列表附件)第二次不起作用

时间:2018-04-02 08:35:37

标签: javascript jquery rest sharepoint-2013 attachment

我无法将第二个文件上传到我的共享点列表(附件)。但是第一个文件作为附件在列表中正确上传。我已经使用了所有的必要引用。代码在此行中断:

 $.getScript(scriptbase + "SP.RequestExecutor.js", function () 

错误来自interner explorer而不是chrome。错误如下:Sys.InvalidOperationException: Type SP.PostMessageRequestInfo has already been registered. The type may be defined multiple times or the script file that defines it may have already been loaded. A possible cause is a change of settings during a partial update. 任何人都可以告诉我们是什么问题。

我指的是link

<script src="..SiteAssets/jquery-1.10.2.js" type="text/javascript"></script>
 <script src="/_layouts/15/sp.runtime.js"></script>
 <script src="/_layouts/15/sp.js"></script>


 <script type="text/javascript" src='../SiteAssets/js/lib/jquery.min.js'></script>


 <script type="text/javascript" src="../SiteAssets/js/jquery.multifile.js"> 
 </script>
 <script type="text/javascript" src="../SiteAssets/js/jquery-ui.js"></script> 
<script type="text/javascript"> 
// var oLoader; 
var attcount = 0; 
var arraycount = 0; 
    $(document).ready(function ($) { 
       $('#file_input').multifile();//For facilitate multi file upload 

    $("#NewSaveItem").click(function () { formSave() }); 

}); 


function formSave() { 
     //   oLoader = SP.UI.ModalDialog.showWaitScreenWithNoClose("Working on it", "Creating New Bank Account..."); 


            var data = []; 
            var fileArray = []; 
            $("#attachFilesHolder input:file").each(function () { 
                if ($(this)[0].files[0]) { 
                    fileArray.push({ "Attachment": $(this)[0].files[0] }); 
                } 
            }); 
        arraycount += fileArray.length;
            data.push({ 

                "City": $("input[title= City]").val(), 

                "Files": fileArray 
            }); 
            createNewItemWithAttachments("DocUploadTest", data).then( 
                function () { 
                  //  if (oLoader.close) setTimeout(function () { oLoader.close(); window.location.replace(_spPageContextInfo.siteAbsoluteUrl + "/Lists/BankDetails/AllItems.aspx"); }, 3000); 

                }, 
                function (sender, args) { 
                    console.log('Error occured' + args.get_message()); 
                } 
            ) 


    } 


var createNewItemWithAttachments = function (listName, listValues) { 
    var fileCountCheck = 0; 
    var fileNames; 
    var context = new SP.ClientContext.get_current(); 
    var dfd = $.Deferred(); 
    var targetList = context.get_web().get_lists().getByTitle(listName); 
    context.load(targetList); 
    var itemCreateInfo = new SP.ListItemCreationInformation(); 
    var listItem = targetList.addItem(itemCreateInfo); 


    listItem.set_item("City", listValues[0].City); 

    listItem.update(); 
    context.executeQueryAsync( 
        function () { 
            var id = listItem.get_id(); 
            if (listValues[0].Files.length != 0) { 
                if (fileCountCheck <= listValues[0].Files.length - 1) { 
                    loopFileUpload(listName, id, listValues, fileCountCheck).then( 
                        function () { 
                        }, 
                        function (sender, args) { 
                            console.log("Error uploading"); 
                            dfd.reject(sender, args); 
                        } 
                    ); 
                } 
            } 
            else { 
                dfd.resolve(fileCountCheck); 
            } 
        }, 
        function (sender, args) { 
            console.log('Error occured' + args.get_message()); 
        } 
    ); 
    return dfd.promise(); 
} 

function loopFileUpload(listName, id, listValues, fileCountCheck) { 
    var dfd = $.Deferred(); 
    uploadFileHolder(listName, id, listValues[0].Files[fileCountCheck].Attachment).then( 
        function (data) { 
            var objcontext = new SP.ClientContext(); 
            var targetList = objcontext.get_web().get_lists().getByTitle(listName); 
            var listItem = targetList.getItemById(id); 
            objcontext.load(listItem); 
            objcontext.executeQueryAsync(function () { 
                console.log("Reload List Item- Success"); 
                fileCountCheck++; 
                if (fileCountCheck <= listValues[0].Files.length - 1) { 
                    loopFileUpload(listName, id, listValues, fileCountCheck); 
                } else { 
                    console.log(fileCountCheck + ": Files uploaded"); 
                    attcount += fileCountCheck; 
                    if (arraycount == attcount) { 
                      //  if (oLoader.close) setTimeout(function () { oLoader.close(); window.location.replace(_spPageContextInfo.siteAbsoluteUrl + "/Lists/BankDetails/AllItems.aspx"); }, 3000); 
                    } 

                } 
            }, 
            function (sender, args) { 
                console.log("Reload List Item- Fail" + args.get_message()); 
            }); 

        }, 
        function (sender, args) { 
            console.log("Not uploaded"); 
            dfd.reject(sender, args); 
        } 
   ); 
    return dfd.promise(); 
} 

function uploadFileHolder(listName, id, file) { 
    var deferred = $.Deferred(); 
    var fileName = file.name; 
    getFileBuffer(file).then( 
        function (buffer) { 
            var bytes = new Uint8Array(buffer); 
            var binary = ''; 
            for (var b = 0; b < bytes.length; b++) { 
                binary += String.fromCharCode(bytes[b]); 
            } 
            var scriptbase = _spPageContextInfo.webServerRelativeUrl + "/_layouts/15/"; 
            console.log(' File size:' + bytes.length); 
            $.getScript(scriptbase + "SP.RequestExecutor.js", function () { 
                var createitem = new SP.RequestExecutor(_spPageContextInfo.webServerRelativeUrl); 
                createitem.executeAsync({ 
                    url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/lists/GetByTitle('" + listName + "')/items(" + id + ")/AttachmentFiles/add(FileName='" + file.name + "')", 
                    method: "POST", 
                    binaryStringRequestBody: true, 
                    body: binary, 
                    success: fsucc, 
                    error: ferr, 
                    state: "Update" 
                }); 
                function fsucc(data) { 
                    console.log(data + ' uploaded successfully'); 
                    deferred.resolve(data); 
                } 
                function ferr(data) { 
                    console.log(fileName + "not uploaded error"); 
                    deferred.reject(data); 
                } 
            }); 

        }, 
        function (err) { 
            deferred.reject(err); 
        } 
    ); 
    return deferred.promise(); 
} 
function getFileBuffer(file) { 
    var deferred = $.Deferred(); 
    var reader = new FileReader(); 
    reader.onload = function (e) { 
        deferred.resolve(e.target.result); 
    } 
    reader.onerror = function (e) { 
        deferred.reject(e.target.error); 
    } 
    reader.readAsArrayBuffer(file); 
    return deferred.promise(); 
} 

html代码:

City :<input type="text" value=""  id="City" title="City">
 <span style="font-family: " segoe ui" ,sans-serif; color: #444444">Click 
 here to attach file</span> <div class="files" id="attachFilesHolder"> 
 <input id="file_input" type="file" name="files[]" multiple="multiple"> 
                                </div> 
 <input name="SaveItem" style=" height: 40px; font-size: 15px;" class="ms-ButtonHeightWidth" id="NewSaveItem" accesskey="O" onclick="" type="button" value="Click here to submit " target="_self">
</html>

控制台输出:

 File size:63
 [object Object] uploaded successfully
 Reload List Item- Success
 File size:4

0 个答案:

没有答案