不带“file://”的拖放 URL

Posted

技术标签:

【中文标题】不带“file://”的拖放 URL【英文标题】:Drag&Drop NSURL without "file://" 【发布时间】:2012-07-18 12:05:10 【问题描述】:

我正在实现我的拖放方法。我需要当用户在我的应用程序窗口上拖动某些东西时,我可以获得该文件的 URL。 NSURL 需要转换为char。没关系。但是如何从网址中删除file://?我当前的代码:

pboard = [sender draggingPasteboard];
NSString *url = [[NSURL URLFromPasteboard:pboard] absoluteString];
input_imageN = strdup([url UTF8String]);

没问题,但它给出了带有file:// 前缀的url。我尝试使用

NSURL *fileUrl = [[NSURL URLFromPasteboard:pboard] isFileURL];
NSString *url = [fileUrl absoluteString];
NSLog(@"url: %@", [NSURL URLFromPasteboard:pboard]);
input_imageN = strdup([url UTF8String]);

但它说

Cannot initialize a variable of type 'NSURL *' with an rvalue of type 'BOOL' (aka 'signed char')

NSURL *fileUrl = [[NSURL URLFromPasteboard:pboard] isFileURL];

【问题讨论】:

【参考方案1】:

要在文件系统的适当表示中以 C 字符串形式从文件 URL 转到路径,您可以:

NSURL *fileURL = [NSURL URLFromPasteboard: pboard];
NSString *filePath = [fileURL path];
char *filesystemRepresentation = [filePath filesystemRepresentation];

这避免了剥离方案只留下路径的假设,或者文件系统肯定很乐意接受 UTF8 编码的路径。

【讨论】:

这应该是正确的答案。使用path 是一种更清洁的方式。【参考方案2】:
url = [url stringByReplacingOccurencesOfString:@"file://" withString:@""];

希望这会有所帮助。干杯!

【讨论】:

没问题。乐意效劳。如果您发现答案有帮助,请考虑接受它,以便其他用户更快地找到解决方案。干杯! 我只是不被允许这样做 4 分钟 :) 错字:stringByReplacingOccurrEncesOfString 而不是 stringByReplacingOccurAncesOfString @Fmessina 谢谢:D,已修复。 试试这个 [self.网址路径];【参考方案3】:

@user23743 的回答是正确的。从 ios 7 开始,虽然 NSURL 有自己的 filestSystemRepresentation 方法。

在 Swift 中:

if let fileURL = NSURL(fromPasteboard: pboard) 
    let representation = fileURL.fileSystemRepresentation

【讨论】:

【参考方案4】:
if let fileURL = NSURL(from: pboard)?.filePathURL 

对我来说最有效。

【讨论】:

以上是关于不带“file://”的拖放 URL的主要内容,如果未能解决你的问题,请参考以下文章

.net的拖放文件上传插件?

图像裁剪器:如何防止默认的拖放操作?

JDK1.6和JDK1.7的拖放区别

没有AJAX的拖放文件上传,在前台同步?

什么是“用鼠标移动东西”中的拖放,而不是数据传输中的拖放?

拖放 - 是不是可以获取 URL?