You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 11从Dropbox拖拽PDF时如何获取原文件名?

解决DropBox拖放PDF获取原文件名的方法

我之前也碰到过类似的问题,DropBox的拖放确实不会直接返回可访问的常规文件URL,但其实可以通过UIDropItem的itemProvider来轻松拿到原文件名,甚至文件数据,具体可以这么操作:

1. 从拖放会话中拿到NSItemProvider

在你的拖放代理方法(比如dropInteraction(_:performDrop:))里,先获取每个拖放项对应的NSItemProvider实例:

func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) {
    for item in session.items {
        let itemProvider = item.itemProvider
        // 接下来处理这个itemProvider
    }
}

2. 两种方式获取原文件名

DropBox的拖放项会携带足够的元数据,你可以优先尝试下面的方法:

方法一:直接获取文件URL(部分场景可用)

如果DropBox允许返回文件URL,你可以通过loadFileRepresentation拿到URL,再提取文件名:

if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeFileURL as String) {
    itemProvider.loadFileRepresentation(forTypeIdentifier: kUTTypeFileURL as String) { url, error in
        guard let fileURL = url, error == nil else { return }
        // 从URL中提取原文件名
        let fileName = fileURL.lastPathComponent
        DispatchQueue.main.async {
            // 切回主线程处理UI或业务逻辑
            print("获取到文件名:\(fileName)")
        }
    }
}

方法二:通过suggestedName直接获取(最可靠)

如果方法一失败,别担心,NSItemProvider的suggestedName属性几乎是所有第三方应用(包括DropBox)都会正确填充的字段,直接拿就好:

if itemProvider.hasItemConformingToTypeIdentifier(kUTTypePDF as String) {
    itemProvider.loadItem(forTypeIdentifier: kUTTypePDF as String, options: nil) { (data, error) in
        guard let pdfData = data as? Data, error == nil else { return }
        // 直接从itemProvider拿到原文件名,默认值做兜底
        let fileName = itemProvider.suggestedName ?? "未知文件名.pdf"
        DispatchQueue.main.async {
            print("获取到文件名:\(fileName)")
            // 同时可以用pdfData处理PDF内容
        }
    }
}

3. 关键注意事项

  • 线程问题:loadFileRepresentation和loadItem都是在后台线程异步执行的,处理完后一定要切回主线程更新UI或者执行后续业务逻辑。
  • 记得导入MobileCoreServices框架,这样才能使用kUTTypePDF、kUTTypeFileURL这些类型常量。
  • 如果你的DragDropFile类原来只处理URL,可以修改它支持接收Data和文件名参数,这样不管是Files应用还是DropBox的拖放,都能统一处理。

内容的提问来源于stack exchange,提问作者user3425784

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:17:55