无法将图像保存到 Egnyte/Google Drive/Dropbox - Swift/Xcode

发布于 2025-01-11 11:21:58 字数 2408 浏览 0 评论 0原文

更新

我尝试了以下代码解决方案,它现在允许我保存到 Google Drive,但 Egnyte 和 Dropbox 仍然呈灰色。

func exportPhotosToFileLocation() {
        var fileURLArray = [URL]()
        
        for data in reviewDataController.tableViewReviewData {
            guard let imageData = data.image.jpegData(compressionQuality: 1.00) else {
                print("ERROR: Unable to print convert image to jpegData in exportPhotosToFileLocation!")
                return
            }
            
            let fileManager = FileManager.default
            
            do {
                let fileURL = fileManager.temporaryDirectory.appendingPathComponent("\(data.imageTitle)").appendingPathExtension("jpeg")
                try imageData.write(to: fileURL)
                fileURLArray.append(fileURL)
                print("Successfully created file from jpegData in exportPhotosToFileLocation!")
            } catch {
                print("ERROR: Unable to create file from jpegData in exportPhotosToFileLocation!")
                return
            }
        }
        
        if #available(iOS 14, *) {
            let controller = UIDocumentPickerViewController(forExporting: fileURLArray)
            present(controller, animated: true)
        }
        else {
            let controller = UIDocumentPickerViewController(urls: fileURLArray, in: .exportToService)
            present(controller, animated: true)
        }
        
    }

这是 Egnyte 的开发者文档。不幸的是,对于我这个初学者来说,这些都没有意义。

Egnyte 开发者文档

------------ -------------------------------------------------- --------------------------------

原始帖子

在我的应用程序中,我我试图允许用户选择保存位置(因此选择一个文件夹)。每当我使用此代码时,Egnyte/Google Drive/Dropbox 都会“变灰”并且无法访问

let supportedTypes : [UTType] = [UTType.folder]
let documentPickerController = UIDocumentPickerViewController(forOpeningContentTypes: supportedTypes)
documentPickerController.delegate = self
self.present(documentPickerController, animated: true, completion: nil)

如果我将supportedTypes更改为

let supportedTypes : [UTType] = [UTType.text]

It确实让我访问它们。有人有解决方案吗?我显然需要用户能够在这些应用程序中选择一个文件夹......您可以看到为什么这很重要。

UPDATE

I tried the following code solution and it allows for me to save to Google Drive now, but Egnyte and Dropbox are still greyed out.

func exportPhotosToFileLocation() {
        var fileURLArray = [URL]()
        
        for data in reviewDataController.tableViewReviewData {
            guard let imageData = data.image.jpegData(compressionQuality: 1.00) else {
                print("ERROR: Unable to print convert image to jpegData in exportPhotosToFileLocation!")
                return
            }
            
            let fileManager = FileManager.default
            
            do {
                let fileURL = fileManager.temporaryDirectory.appendingPathComponent("\(data.imageTitle)").appendingPathExtension("jpeg")
                try imageData.write(to: fileURL)
                fileURLArray.append(fileURL)
                print("Successfully created file from jpegData in exportPhotosToFileLocation!")
            } catch {
                print("ERROR: Unable to create file from jpegData in exportPhotosToFileLocation!")
                return
            }
        }
        
        if #available(iOS 14, *) {
            let controller = UIDocumentPickerViewController(forExporting: fileURLArray)
            present(controller, animated: true)
        }
        else {
            let controller = UIDocumentPickerViewController(urls: fileURLArray, in: .exportToService)
            present(controller, animated: true)
        }
        
    }

Here is the developer documents for Egnyte. Unfortunately, none of it makes sense to me as a beginner.

Egnyte Developer Documentation

----------------------------------------------------------------------------------------------

ORIGINAL POST

In my app, I'm trying to allow the user to select a save location (so choose a folder). Whenever I use this code, Egnyte/Google Drive/Dropbox are all "greyed" out and inaccessible.

let supportedTypes : [UTType] = [UTType.folder]
let documentPickerController = UIDocumentPickerViewController(forOpeningContentTypes: supportedTypes)
documentPickerController.delegate = self
self.present(documentPickerController, animated: true, completion: nil)

If I change supportedTypes to

let supportedTypes : [UTType] = [UTType.text]

It does let me access them. Does anyone have a solution for this? I obviously need the user to be able to select a folder in these applications... you can see why that is important.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

说谎友 2025-01-18 11:21:58

这取决于文件提供程序扩展(Google Drive 等)。为了允许选择文件夹,文件提供程序必须以分层方式将内容放置在其目录中......如果他们这样做,他们需要在 Info.plist 中指定 NSExtensionFileProviderSupportsPickingFolders 来告诉系统允许选择文件夹。

您需要选择保存位置并保留它吗?如果是,那么您将被阻止实现必要的 API 的文件提供程序。如果不是,您传递的类型应该是您实际保存的文档的类型。该文档将在所选文件夹中保存一次(对文件提供程序扩展没有任何额外要求),并且您将必须再次使用文档选择器来保存下一个文档。

This is up to the file provider extension (Google Drive, etc.). To allow picking a folder, the file provider has to lay content in its directory in a hierarchical manner... if they do this, they need to specify NSExtensionFileProviderSupportsPickingFolders in their Info.plist to tell the system it's allowed to choose folders.

Do you need to choose a save location and persist it? If yes, then you'll be blocked on the file provider implementing the necessary API. If not, the type you pass should the type of the document you are actually saving. The document will be saved once in the chosen folder (without any additional requirements on the file provider extension), and you will have to use the document picker again to save the next document.

温柔戏命师 2025-01-18 11:21:58

如果您尝试在 Apple 文件导入器中选择 Dropbox 作为导入文件的位置,但它没有前进到文件选择屏幕,我发现重新启动 iPhone 似乎可以解决该问题。

输入图片此处描述

If you are trying to select Dropbox as a location to import files from in the Apple File Importer but it does not advance to the file selection screen I found that restarting my iPhone seemed to resolve that issue.

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文