2010-08-09 37 views
0

我有一個奇怪的AppleScript問題,似乎無法弄清楚的根本原因,或解決方案。我試圖用一個模仿下面的過程下載文件。此代碼失敗,報告「URL訪問腳本出錯:無法將某些數據轉換爲預期類型。」號碼-1700到項目URL訪問腳本中AppleScript的文件名長度限制?

如果我從本地路徑名稱中刪除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 

回答

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的方法的簡單性,它只需要重命名該文件,如果它需要它。

+0

很好玩。我甚至沒有想過這樣做。 – 2010-08-10 13:15:18

1

你最大的問題是您使用的是POSIX風格的路徑(使用斜線)時,你應該使用的是Mac風格的路徑(用冒號)。 Applescript使用冒號分隔的路徑,我們可以轉換兩者之間使用「posix路徑」從冒號走到斜槓和「posix文件」從斜槓到冒號。

而且您不能僅將路徑作爲字符串傳遞。在applescript中,我們使用文件說明符......這就是爲什麼我把文件放在字符串路徑前面的原因。所以一旦我們解決這個問題,這個工作。

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 
+0

我得到一個錯誤,告訴我它不能從指定的路徑獲取POSIX文件(因爲該文件不存在嗎?)。我相信,URL訪問腳本確實採用POSIX路徑,因爲我在網上發現的衆多示例顯示了這一點。另外,我認爲這是CURL的一個簡單包裝 - CURL是否具有31個字符的限制?還是)感謝你的建議。 – Dov 2010-08-09 21:34:17

+0

我可以將這兩行首先放入腳本中,並且沒有錯誤...並且沒有文件。所以我不確定你到底發生了什麼。確保將它強制轉換爲我所顯示的文本,然後在下載語句中將關鍵字「文件」放在它之前,以將其強制爲聲明所需的文件規範。 – regulus6633 2010-08-11 06:10:28

+0

好的,再試一次,我發現它確實有效,但截斷問題你更新了帖子,我沒有更好。基本上,這會截斷文件名而不是拋出錯誤。 – Dov 2010-08-11 15:37:51

1

我敢打賭,這個函數仍然會調用一些只允許31個字符的古代碳(或預碳)API調用。與此相關的一些Google鏈接可以追溯到2003年,就Mac OS而言,年份和具體的31個字符限制都指向這是一個過時的API,它從未被提出過。這是AppleScript黑暗角落的問題。也許Satimage或其他人已經爲此製作了一個腳本加法。我認爲你被卡住了,需要從這個加成以外的某個地方獲得幫助。我很想證明這個問題是錯誤的,因爲無論我嘗試了什麼,我都無法使它工作。

+0

想想看,雖然有點奇怪,但我注意到的效果是,當長度爲33個字符而不是32或34(包括句點和擴展名)時。在32都沒事的時候,在34時它完全失敗 - 但在33時,它可以保存,但損壞。奇怪,我真的不知道它的意思或暗示。 – Dov 2010-08-10 19:21:03

+0

我認爲這隻意味着你偶然發現了一個錯誤,而現在完全是過時的功能。 – 2010-08-10 19:53:15

+0

有沒有更好的方法來下載文件?據我所知,這是最簡單的推薦方式(不需要自動化FTP應用程序)。 – Dov 2010-08-11 12:13:02