URL访问脚本中AppleScript的文件名长度限制?

时间:2010-08-09 19:36:08

标签: curl applescript urlaccess

我遇到了一个奇怪的AppleScript问题,似乎无法找出根本原因或解决方案。我正在尝试下载文件,其过程模仿下面的文件。此代码对我失败,报告“ URL访问脚本有错误:无法将某些数据转换为预期类型。”编号-1700到项目

如果我从本地路径名中删除3个字符(并且它似乎并不重要3),那么它运行正常。如果我只删除2个字符,它不会抛出错误,但它下载的文件是一个损坏的JPG。我尝试在“do shell script”行中使用curl做同样的事情,并且它似乎也因任何文件名长度而失败,尽管是静默的(返回"")。造成这种情况的原因是什么,我该怎么办?

tell application "URL Access Scripting"
    download "http://interfacelift.com/wallpaper_beta/grab/02331_veiledinclouds_2560x1600.jpg" to "/Users/abc/Downloads/02331_veiledinclouds_2560x1600.jpg"
end tell

3 个答案:

答案 0 :(得分:1)

当你应该使用mac风格的路径(使用冒号)时,你最大的问题是你正在使用posix风格的路径(使用斜杠)。 Applescript使用冒号分隔的路径。我们可以使用“posix path”从冒号转换为斜杠,将“posix文件”转换为斜线到冒号。

你不能只把路径作为字符串传递。在applescript中我们使用文件说明符...这就是我将word文件放在字符串路径前面的原因。因此,一旦我们解决了这个问题,这就行了。

set posixPath to "/Users/abc/Downloads/02331_veiledinclouds_2560x1600.jpg"
set macPath to (POSIX file posixPath) as text

tell application "URL Access Scripting"
    download "http://interfacelift.com/wallpaper_beta/grab/02331_veiledinclouds_2560x1600.jpg" to file macPath
end tell

但是,必须存在文件名长度问题,因为当我运行它时,下载文件的文件名缩短为31个字符。

修改: 这是一个截断,下载和重命名文件的脚本。

set posixPath to "/Users/abc/Downloads/02331_veiledinclouds_2560x1600.jpg"
set baseName to do shell script "/usr/bin/basename " & quoted form of posixPath

set needsRenaming to false
if (count of baseName) is greater than 31 then
    set downloadName to text -31 thru -1 of baseName
    set basePath to do shell script "/usr/bin/dirname " & quoted form of posixPath
    set posixPath to basePath & "/" & downloadName
    set needsRenaming to true
end if

set macPath to (POSIX file posixPath) as text

tell application "URL Access Scripting"
    download "http://interfacelift.com/wallpaper_beta/grab/02331_veiledinclouds_2560x1600.jpg" to file macPath
end tell

if needsRenaming then
    tell application "Finder"
        set name of file macPath to baseName
    end tell
end if

答案 1 :(得分:1)

我愿意打赌这个函数仍然会调用一些只允许31个字符的古代Carbon(或pre-Carbon)API调用。与此相关的一些谷歌链接可以追溯到2003年,就Mac OS而言,年份和特定的31个字符限制都指向这是一个过时的API,从未更新过。这是Applescript较暗角落的问题。也许Satimage或某人制作了一个脚本加法可以解决这个问题。我认为你很困难,需要从这个补充之外的某个地方获得帮助。我希望在这个问题上证明是错误的,因为无论我尝试什么,我都无法工作。

答案 2 :(得分:1)

我最终决定下载一个临时的,更短的名字,然后用Finder重命名。重写的脚本如下:

tell application "URL Access Scripting"
    set tempFileName to "abc.jpg"
    set downloadPath to (POSIX path of (path to downloads folder))

    set tempFile to download "http://interfacelift.com/wallpaper_beta/grab/02331_veiledinclouds_2560x1600.jpg" to downloadPath & tempFileName
end tell

tell application "Finder" to set name of file tempFile to "02331_veiledinclouds_2560x1600.jpg"

我更喜欢这种方法对regulus6633方法的简单性,只有在需要时才重命名该文件。