How to attach file in sharepoint I am using that function but its error [duplicate]
-
22-01-2021 - |
题
What is the problem with this? Im trying to attach file in SharePoint.
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
<script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.js"></script>
<script type="text/javascript" src="/_layouts/15/SP.RequestExecutor.js"></script>
<script type="text/javascript" src="/SiteAssets/Sample/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="/SiteAssets/Sample/jquery-ui.js"></script>
<script type="text/javascript" src="/SiteAssets/Sample/jquery.msgBox.min.js"></script>
<script type="text/javascript" src="/SiteAssets/Sample/jquery.multifile.js"></script>
<script type="text/javascript">
function upload() {
// Define the folder path for this example.
var serverRelativeUrlToFolder = 'Sample';
// Get test values from the file input and text input page controls.
var fileInput = jQuery('#getFile');
// var newName = jQuery('#displayName').val();
var fileCount = fileInput[0].files.length;
// Get the server URL.
var serverUrl = _spPageContextInfo.webAbsoluteUrl;
var filesUploaded = 0;
for(var i = 0; i < fileCount; i++){
// Initiate method calls using jQuery promises.
// Get the local file as an array buffer.
var getFile = getFileBuffer(i);
getFile.done(function (arrayBuffer,i) {
// Add the file to the SharePoint folder.
var addFile = addFileToFolder(arrayBuffer,i);
addFile.done(function (file, status, xhr) {
//$("#msg").append("<div>File : "+file.d.Name+" ... uploaded sucessfully</div>");
filesUploaded++;
if(fileCount == filesUploaded){
alert("All files uploaded successfully");
//$("#msg").append("<div>All files uploaded successfully</div>");
$("#getFile").value = null;
filesUploaded = 0;
}
});
addFile.fail(onError);
});
getFile.fail(onError);
}
// Get the local file as an array buffer.
function getFileBuffer(i) {
var deferred = jQuery.Deferred();
var reader = new FileReader();
reader.onloadend = function (e) {
deferred.resolve(e.target.result,i);
}
reader.onerror = function (e) {
deferred.reject(e.target.error);
}
reader.readAsArrayBuffer(fileInput[0].files[i]);
return deferred.promise();
}
// Add the file to the file collection in the Shared Documents folder.
function addFileToFolder(arrayBuffer,i) {
var index = i;
// Get the file name from the file input control on the page.
var fileName = fileInput[0].files[index].name;
// Construct the endpoint.
var fileCollectionEndpoint = String.format(
"{0}/_api/web/getfolderbyserverrelativeurl('{1}')/files" +
"/add(overwrite=true, url='{2}')",
serverUrl, serverRelativeUrlToFolder, fileName);
// Send the request and return the response.
// This call returns the SharePoint file.
return jQuery.ajax({
url: fileCollectionEndpoint,
type: "POST",
data: arrayBuffer,
processData: false,
headers: {
"accept": "application/json;odata=verbose",
"X-RequestDigest": jQuery("#__REQUESTDIGEST").val(),
"content-length": arrayBuffer.byteLength
}
});
}
}
// Display error messages.
function onError(error) {
alert(error.responseText);
}
</script>
</head>
<body>
<input id="getFile" type="file" multiple="multiple"/><br />
<input id="addFileButton" type="button" value="Upload" onclick="upload();"/>
</body>
</html>
解决方案
For upload attachment to list you need to change the script as the above script is for library,changing addFileToFolder
function upload() {
// Define the folder path for this example.
var serverRelativeUrlToFolder = 'Sample';
//change item to your itemid for no hardcoding the value
var itemId = 92;
// Get test values from the file input and text input page controls.
var fileInput = jQuery('#getFile');
// var newName = jQuery('#displayName').val();
var fileCount = fileInput[0].files.length;
// Get the server URL.
var serverUrl = _spPageContextInfo.webAbsoluteUrl;
var filesUploaded = 0;
for(var i = 0; i < fileCount; i++){
// Initiate method calls using jQuery promises.
// Get the local file as an array buffer.
var getFile = getFileBuffer(i);
getFile.done(function (arrayBuffer,i) {
// Add the file to the SharePoint folder.
var addFile = addFileToFolder(arrayBuffer,i);
addFile.done(function (file, status, xhr) {
//$("#msg").append("<div>File : "+file.d.Name+" ... uploaded sucessfully</div>");
filesUploaded++;
if(fileCount == filesUploaded){
alert("All files uploaded successfully");
//$("#msg").append("<div>All files uploaded successfully</div>");
$("#getFile").value = null;
filesUploaded = 0;
}
});
addFile.fail(onError);
});
getFile.fail(onError);
}
// Get the local file as an array buffer.
function getFileBuffer(i) {
var deferred = jQuery.Deferred();
var reader = new FileReader();
reader.onloadend = function (e) {
deferred.resolve(e.target.result,i);
}
reader.onerror = function (e) {
deferred.reject(e.target.error);
}
reader.readAsArrayBuffer(fileInput[0].files[i]);
return deferred.promise();
}
// Add the file to the file collection in the Shared Documents folder.
function addFileToFolder(arrayBuffer,i) {
var index = i;
// Get the file name from the file input control on the page.
var fileName = fileInput[0].files[index].name;
// Construct the endpoint.
var queryUrl = serverUrl+ "/_api/lists/GetByTitle('" + serverRelativeUrlToFolder + "')/items(" + itemId + ")/AttachmentFiles/add(FileName='" + fileName + "')";
// Send the request and return the response.
// This call returns the SharePoint file.
return jQuery.ajax({
url: queryUrl,
type: "POST",
data: arrayBuffer,
processData: false,
headers: {
"accept": "application/json;odata=verbose",
"X-RequestDigest": jQuery("#__REQUESTDIGEST").val(),
"content-length": arrayBuffer.byteLength
}
});
}
}
// Display error messages.
function onError(error) {
alert(error.responseText);
}
其他提示
How to add attachment including these list. My problem is how can I change the var itemId = (The ID of a list I add). From the code below.
Here is my code.
function upload() {
// Define the folder path for this example.
var serverRelativeUrlToFolder = 'Sample';
//change item to your itemid for no hardcoding the value
var itemId = (The ID of a list I add);
// Get test values from the file input and text input page controls.
var fileInput = jQuery('#getFile');
// var newName = jQuery('#displayName').val();
var fileCount = fileInput[0].files.length;
// Get the server URL.
var serverUrl = _spPageContextInfo.webAbsoluteUrl;
var filesUploaded = 0;
for(var i = 0; i < fileCount; i++){
// Initiate method calls using jQuery promises.
// Get the local file as an array buffer.
var getFile = getFileBuffer(i);
getFile.done(function (arrayBuffer,i) {
// Add the file to the SharePoint folder.
var addFile = addFileToFolder(arrayBuffer,i);
addFile.done(function (file, status, xhr) {
//$("#msg").append("<div>File : "+file.d.Name+" ... uploaded sucessfully</div>");
filesUploaded++;
if(fileCount == filesUploaded){
alert("All files uploaded successfully");
//$("#msg").append("<div>All files uploaded successfully</div>");
$("#getFile").value = null;
filesUploaded = 0;
}
});
addFile.fail(onError);
});
getFile.fail(onError);
}