Определение длины URL-адреса для определения типа файла UIDocumentPickerViewController - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь получить тип файла из DocumentPicker. Я разрешаю моему пользователю загружать оба типа документов PDF / WORD (doc / docx), и мне важно знать, какой это, чтобы я мог переименовать файл и загрузить его на свой AWS S3.

Любая помощь приветствуется, я не могу найти способ получить ее напрямую из UIDocumentPickerViewController.

Таким образом, я попытался найти длину всего URL-адреса и за вычетом длины на 2/3 найти первую букву «d» или «p», затем я могу установить соответствующее имя. Однако я получаю эту ошибку, Невозможно вызвать инициализатор для типа 'String' со списком аргументов типа '(URL)'.

 public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
        let myURL = url as URL
        print("import result : \(myURL)")

        let s3BucketName = "adnexio-directory/cv_upload"
        let url = myURL
        var remoteName = ""
        //if (url[url.length as Int - 3] == "d")
        //if (str[str.count - 3] == "d")
        if (url.length - 3 == "d")
        {
            remoteName = "IOSTEST.docx"
        }
        else if (url.length - 2 == "d")
             {
                remoteName = "IOSTEST.doc"
        }
        else
        {
            remoteName = "IOSTEST.pdf"
        }



        print("REMOTE NAME : ",remoteName)

Ответы [ 2 ]

2 голосов
/ 06 марта 2019

Самый простой способ - проверить расширение пути URL-адреса

let extension = myURL.pathExtension
switch extension {
    case "pdf" : print("It's PDF")
    case "doc", "docx" : print("It's a MS Word document")
    default : print("It's unknown")
}
0 голосов
/ 06 марта 2019

Я решил это. Я добавил информацию ниже о том, как решить эту проблему:

let str = url.absoluteString

if str[str.count - 4] == "d"
{
    remoteName = "IOSTEST.docx"
}
else if str[str.count - 3] == "d"
     {
        remoteName = "IOSTEST.doc"
}
else
{
    remoteName = "IOSTEST.pdf"
}

и вам нужно будет добавить это расширение

extension String {

var length: Int {
    return count
}

subscript (i: Int) -> String {
    return self[i ..< i + 1]
}

func substring(fromIndex: Int) -> String {
    return self[min(fromIndex, length) ..< length]
}

func substring(toIndex: Int) -> String {
    return self[0 ..< max(0, toIndex)]
}

subscript (r: Range<Int>) -> String {
    let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)),
                                        upper: min(length, max(0, r.upperBound))))
    let start = index(startIndex, offsetBy: range.lowerBound)
    let end = index(start, offsetBy: range.upperBound - range.lowerBound)
    return String(self[start ..< end])
}

}

Я не знаю, почему это не по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...