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

Curl URL访问脚本中AppleScript的文件名长度限制?,curl,applescript,urlaccess,Curl,Applescript,Urlaccess,我遇到了一个奇怪的AppleScript问题,似乎无法找出根本原因或解决方案。我正试图用一个类似于下面的过程来下载文件。此代码对我来说失败,报告“URL访问脚本遇到错误:无法将某些数据转换为预期类型。“编号-1700到项目”” 如果我从本地路径名中删除3个字符(哪3个字符似乎无关紧要),那么它运行正常。如果我只删除2个字符,它不会抛出错误,但它下载的文件是一个损坏的JPG。我在“do shell script”行中尝试使用curl执行相同的操作,对于任何文件名长度,它似乎都失败,尽管是无声的(返

我遇到了一个奇怪的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

最大的问题是,当您应该使用mac样式的路径(带冒号)时,您使用的是posix样式的路径(使用斜杠)。Applescript使用冒号分隔的路径。我们可以使用“posix路径”从冒号转换为斜杠,“posix文件”从斜杠转换为冒号

你不能只是把路径作为字符串来传递。在applescript中我们使用文件说明符…这就是为什么我把单词file放在字符串路径前面。所以一旦我们解决了这个问题,这个方法就有效了

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

最大的问题是,当您应该使用mac样式的路径(带冒号)时,您使用的是posix样式的路径(使用斜杠)。Applescript使用冒号分隔的路径。我们可以使用“posix路径”从冒号转换为斜杠,“posix文件”从斜杠转换为冒号

你不能只是把路径作为字符串来传递。在applescript中我们使用文件说明符…这就是为什么我把单词file放在字符串路径前面。所以一旦我们解决了这个问题,这个方法就有效了

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

我敢打赌,这个函数仍然调用一些古老的碳(或前碳)API调用只允许31个字符。一些与此相关的谷歌链接可以追溯到2003年,就Mac OS而言,今年和特定的31个字符限制都表明这是一个过时的API,从未更新过。这是Applescript较暗角落的问题。可能是Satimage或有人疯了e一个脚本添加程序可以解决这个问题。我想你被卡住了,需要从这个添加程序之外的某个地方获得帮助。我很想证明这一点是错误的,因为无论我怎么做,我都无法让它工作。

我敢打赌,这个函数仍然调用一些古老的碳(或预碳)API调用只允许31个字符。一些与此相关的谷歌链接可以追溯到2003年,就Mac OS而言,今年和特定的31个字符限制都表明这是一个过时的API,从未更新过。这是Applescript较暗角落的问题。可能是Satimage或有人疯了e一个脚本添加可以解决这个问题。我想你被卡住了,需要从这个添加之外的某个地方获得帮助。我很想证明这一点是错误的,因为无论我怎么做,我都无法让它工作。

我最终决定下载一个临时的、较短的名称,然后用Finder重命名它。重写的脚本t如下:

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的方法相比,我更喜欢这种方法的简单性,regulus6633只在需要时重命名文件。

我最终决定下载一个临时的、较短的名称,然后用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的方法相比,我更喜欢这种方法的简单性,regulus6633的方法仅在需要时重命名文件。

我收到一个错误,告诉我它无法从指定的路径获取POSIX文件(因为该文件还不存在?)。我相信URL访问脚本确实采用POSIX路径,正如我在网上找到的许多例子所表明的那样。此外,我相信它是一个围绕CURL的薄型包装器-CURL是否有31个字符的限制?不过,谢谢你的建议。我可以将前2行单独放入脚本中,并且没有错误…也没有文件。所以我不确定e你这边发生了什么。确保你像我显示的那样强制它为文本,然后在下载语句中放置关键字“file”"在它之前,我必须将其强制为语句所需的文件规范。好的,再试一次,我发现它确实有效,但对于您更新帖子时遇到的截断问题,我也没有什么好处。本质上,这会截断文件名,而不是抛出错误。我在回答中添加了另一个脚本来处理截断问题ue。它基本上检测名称是否过长,如果过长,则手动截断名称,下载文件,并将截断的名称重命名为原始名称。我收到一个错误,告诉我它无法从指定的路径获取POSIX文件(因为该文件尚不存在?)。我相信URL访问脚本确实采用POSIX路径,正如我在网上找到的许多例子所表明的那样。此外,我相信它是一个围绕CURL的薄型包装器-CURL是否有31个字符的限制?不过,谢谢你的建议。我可以将前2行单独放入脚本中,并且没有错误…也没有文件。所以我不确定e你这边发生了什么。确保你像我展示的那样将其强制为文本,然后在下载语句中,你将关键字“file”放在它前面,强制它为语句所要求的文件规范。好的,再试一次,我看到它