Swift
Swift
SharePoint -- Download Newer Files
See more SharePoint Examples
Demonstrates how to download all files from a SharePoint folder that are newer than the local files.Chilkat Swift Downloads
func chilkatTest() {
var success: Bool = false
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// -------------------------------------------------------------------------
// The following comments apply to SharePoint Windows classic authentication.
// -------------------------------------------------------------------------
// For example, imagine our SharePoint endpoint is https://xyzoffice.mycompany.com/
// The SHAREPOINT_NTLM_DOMAIN would be "mycompany.com"
// The SHAREPOINT_HTTPS_DOMAIN would be "xyzoffice.mycompany.com"
// Also, the SHAREPOINT_USERNAME would be just the name, not a full email address.
// for example, "chilkat" instead of "chilkat@mycompany.com"
let http = CkoHttp()!
// If SharePoint Windows classic authentication is used, then set the
// Login, Password, LoginDomain, and NtlmAuth properties.
http.login = "SHAREPOINT_USERNAME"
http.password = "SHAREPOINT_PASSWORD"
http.loginDomain = "SHAREPOINT_NTLM_DOMAIN"
http.ntlmAuth = true
// -------------------------------------------------------------------------
// The more common case is to use SharePoint Online authentication (via the SPOIDCRL cookie).
// If so, do not set Login, Password, LoginDomain, and NtlmAuth, and instead
// establish the cookie as shown at SharePoint Online Authentication
// -------------------------------------------------------------------------
// First we'll download a list of all the files in the /Documents folder.
// This provides the names and last-modified date/times of the files located
// on the SharePoint server.
http.accept = "application/json;odata=verbose"
http.acceptCharset = "utf-8"
let sbJson = CkoStringBuilder()!
success = http.quickGetSb(url: "https://SHAREPOINT_HTTPS_DOMAIN/_api/web/GetFolderByServerRelativeUrl('/Documents')/Files", sbContent: sbJson)
if success == false {
print("\(http.lastErrorText!)")
return
}
// Before proceeding, make sure the local directory where we'll be downloading files exists.
let fac = CkoFileAccess()!
fac.dirEnsureExists(dirPath: "qa_output/sharepoint/Documents")
// OK.. load the JSON and iterate over each file
let json = CkoJsonObject()!
json.loadSb(sb: sbJson)
var numFiles: Int = json.size(ofArray: "d.results").intValue
print("Number of Files in the SharePoint /Documents folder = \(numFiles)")
let lastModRemote = CkoDateTime()!
let lastModLocal = CkoDateTime()!
let localPath = CkoStringBuilder()!
let fileUrl = CkoStringBuilder()!
var i: Int = 0
while i < numFiles {
json.i = i
var filename: String? = json.string(of: "d.results[i].Name")
var sLastModified: String? = json.string(of: "d.results[i].TimeLastModified")
print("\(i + 1): \(filename!) (\(sLastModified!))")
lastModRemote.set(fromTimestamp: sLastModified)
var bDownload: Bool = false
// Check to see if the local file exists. If not, then download.
localPath.setString(value: "qa_output/sharepoint/Documents/")
localPath.append(value: filename)
if fac.fileExists(path: localPath.getAsString()) != true {
print("This file does not exist locally.")
bDownload = true
}
else {
// Get the local file's date time and compare with the remote file date/time.
lastModLocal.set(fromTimestamp: fac.getFileTimeStr(path: localPath.getAsString(), which: 0))
// Get the difference in seconds between the local and remote last-modified times.
// if the return value is negative, then the caller's time is
// older than the argument. (in this case, a negative return value means
// the local file is older than the remote file.
// Note: The DiffSeconds method was found to be missing in the Chilkat .NET build
// (and possibly in other builds). It will be present in the v9.5.0.67 release and later.
var numSeconds: Int = lastModLocal.diffSeconds(dateTimeArg: lastModRemote).intValue
if numSeconds < 0 {
print("The local file is older than the remote file.")
bDownload = true
}
}
if bDownload == true {
fileUrl.setString(value: "https://SHAREPOINT_HTTPS_DOMAIN/_api/web/GetFolderByServerRelativeUrl('/Documents')/Files('")
fileUrl.append(value: filename)
fileUrl.append(value: "')/$value")
print("Downloading \(filename!)")
success = http.download(url: fileUrl.getAsString(), saveToPath: localPath.getAsString())
if success == false {
print("\(http.lastErrorText!)")
return
}
// Set the local file's last-modified date/time to that of the server's.
fac.setLastModified(path: localPath.getAsString(), lastModified: lastModRemote)
}
i = i + 1
}
print("All finished.")
}