File

Provide manipulate functions on file: file download & file upload in the kintone app.

Warning

The user must set the promises to global to use the module:

    DispatchQueue.promise = .global()

Constructor

Parameter

Name Type Required Description
connection Connection yes The connection module of this SDK.

Sample code

Initial file class Source code

    // Init File Module
    let fileManager = File(con)

Methods

upload

Upload file kintone via Rest API

Declaration

func upload(_ filePath: String) -> Promise<FileModel>

Parameter

Name Type Required Description
filePath String yes The full path of file on your environment

Return

Promise<FileModel>

Sample code

Get app sample Source code

    let USERNAME = "your_username"
    let PASSWORD = "your_password"
    let DOMAIN = "your_domain"

    // Init authenticationAuth
    let auth = Auth()
    auth.setPasswordAuth(USERNAME, PASSWORD)
    let con = Connection(DOMAIN, auth)

    // Init File Module
    let fileManager = File(con)
    let recordManager = Record(con)


    var fileTestRecord: Dictionary<String, FieldValue> = [:]
        var field = FieldValue()
        field.setType(FieldType.SINGLE_LINE_TEXT)
        field.setValue("testUploadSuccessForSingleFile")
        fileTestRecord[fieldCode] = field

    var fileName = "test"   
    var fileExtention = "txt"
    // exec upload and result check
    let testBundle = Bundle(for: type(of: self))
    if let upload_file_path = testBundle.url(forResource: fileName, withExtension: fileExtention){
        fileManager.uploadAsync(upload_file_path.absoluteString).then{ fileResponse in
            // exec add record
            let fileList = [fileResponse]
            fileTestRecord = Dictionary<String, FieldValue> = [:]
            field.setType(FieldType.FILE)
            field.setValue(fileList)
            fileTestRecord["ATTACH_FILE_1"] = field

            recordManager.addRecord(self.APP_ID, fileTestRecord).then{ addResponse -> Promise in
                    let recId = addResponse.getId()
                    return (recordManager.getRecord(self.APP_ID, recId!))!
                }.then { getResponse in
                    // result check
                    let fileResult: [FileModel] = getResponse.getRecord()!["ATTACH_FILE_1"]!.getValue() as! [FileModel]
                    print(fileResult.count)
                    print(fileResult[0].getSize())
                    print(fileResult[0].getName())
                    print(fileResult[0].getFileKey())
                    print(fileResult[0].getContentType()!)
            }
        }.catch{ error in
        if error is KintoneAPIException {
            print((error as! KintoneAPIException).toString()!)
        }
        else {
            print((error as! Error).localizedDescription)
        }
    }

download

Download file kintone via Rest API

Declaration

func download(_ filekey: String, _ outPutFilePath: String) -> Promise<Void>

Parameter

Name Type Required Description
fileKey String yes The file key of the uploaded file on kintone
outPutFilePath String yes The full path of output file on your environment

Return

Promise<Void>

Sample code

Get apps sample Source code

    let USERNAME = "your_username"
    let PASSWORD = "your_password"
    let DOMAIN = "your_domain"

    // Init authenticationAuth
    let auth = Auth()
    auth.setPasswordAuth(USERNAME, PASSWORD)
    let con = Connection(DOMAIN, auth)

    // Init File Module
    let fileManager = File(con)
    let recordManager = Record(con)
    var fieldCode = "SINGLE_LINE_TEXT"
    var fileTestRecord: Dictionary<String, FieldValue> = [:]
    var field = FieldValue()
        field.setType(FieldType.SINGLE_LINE_TEXT)
        field.setValue("testDownloadSuccessForSingleFile")
        fileTestRecord[fieldCode] = field
            // exec upload and result check
    let testBundle = Bundle(for: type(of: self))
    guard let upload_file_path = testBundle.url(forResource: "test", withExtension: "txt") else {
        return XCTFail()
    }
    self.fileManagement?.uploadAsync(upload_file_path.absoluteString).then{ fileResponse -> Promise in
        // exec add record
        let fileList = [fileResponse]
        fileTestRecord = Dictionary<String, FieldValue> = [:]
        field.setType(FieldType.FILE)
        field.setValue(fileList)
        fileTestRecord["ATTACH_FILE_1"] = field
        return (self.recordManagement?.addRecord(self.APP_ID, fileTestRecord))!
    }.then { addResponse -> Promise in
        let recId = addResponse.getId()
        return (self.recordManagement?.getRecord(self.APP_ID, recId!))!
    }.then { getResponse in
        // exec download file and result check
        let fileResult: [FileModel] = getResponse.getRecord()!["ATTACH_FILE_1"]!.getValue() as! [FileModel]
        if let dowloadDir = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first {
            let pathFileName = dowloadDir.absoluteString + fileResult[0].getName()!
            self.fileManagement?.downloadAsync((fileResult[0].getFileKey()!), pathFileName)
            .catch{ error in
                if error is KintoneAPIException {
                    print((error as! KintoneAPIException).toString()!)
                } else {
                    print((error as! Error).localizedDescription)
                }
            }
        }
    }