2010-08-09 9 views
0

나는 이상한 AppleScript 문제가있어 근본적인 원인이나 해결 방법을 파악하지 못하는 것 같습니다. 나는 아래의 것을 모방 한 프로세스로 파일을 다운로드하려고 노력하고있다. 이 코드는 나를 위해 실패합니다. "URL Access Scripting에 오류가 발생했습니다 : 일부 데이터를 예상되는 형식으로 만들 수 없습니다." 숫자 -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

잘 연주했습니다. 나는 그렇게 생각조차하지 않았다. –

1

당신의 가장 큰 문제는 당신이 (콜론) 맥 스타일의 경로를 사용해야하는 경우 (슬래시 사용) POSIX 스타일 경로를 사용하고 있습니다. AppleScript는 콜론으로 구분 된 경로를 사용합니다. t 사이에 "posix path"를 사용하여 콜론에서 슬래시로 이동하고 "posix file"을 사용하여 슬래시에서 콜론으로 이동합니다.

그리고 경로를 문자열로 전달할 수 없습니다. applescript에서 우리는 파일 지정자 (file specifiers)를 사용합니다 ... 그래서 나는 파일을 문자열 경로 앞에 놓습니다. 우리가 수정하면 이렇게 작동합니다.

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을 둘러싼 얇은 래퍼 (wrapper)라고 생각합니다. CURL은 31 자로 제한됩니까? 그래도 제안을 주셔서 감사합니다. – Dov

+0

처음 두 줄을 모두 스크립트에 넣을 수 있으며 오류가 없습니다 ... 파일이 없습니다. 그래서 네게 무슨 일이 일어나고 있는지 모르겠다. 내가 보여준 텍스트에 그것을 강요하고 다운로드 문장에 키워드 "파일"을 두어 문장에 요구되는 파일 스펙을 강요하십시오. – regulus6633

+0

좋아, 다시 시도해 보니 제대로 작동하는 것으로 확인되었지만 잘라낸 문제로 게시물을 업데이트했다면 더 나아지지 않습니다.기본적으로 이것은 오류를 던지는 대신 파일 이름을 자릅니다. – Dov

1

나는이 기능은 여전히 ​​31자를 수 있습니다 고대 탄소 (또는 사전 탄소) API 호출을 호출하는 거라 확신. 이것과 관련된 Google 링크 중 일부는 2003 년으로 거슬러 올라갑니다. Mac OS에 관한 한 올해와 특정 31 자 제한은 결코 최신으로 업데이트되지 않은 오래된 API입니다. 이것은 Applescript의 어두운 구석에있는 문제입니다. 어쩌면 Satimage 또는 누군가가이 문제를 해결하는 Scripting Addition을 만들었을 것입니다. 나는 당신이 붙어 있고이 추가 밖의 어딘가에서 도움을 얻을 필요가 있다고 생각합니다. 나는 내가 시도한 것에 상관없이 그것을 작동시키지 못하기 때문에 이것에 대해 틀린 것을 증명하고 싶다.

+0

더 이상 생각해 보면, 길이가 32 또는 34 (길이 및 확장 포함) 대신 길이가 33 자일 때 내가 알아 차린 효과는 매우 이상합니다. 32시는 괜찮아요. 34시에는 완전히 실패합니다.하지만 33시에는 저축하지만, 부패했습니다. 이상하고, 나는 그것이 의미하거나 의미하는 바를 실제로 가지고 있지 않습니다. – Dov

+0

제 생각에 그것은 당신이 버그였던 것을 우연히 발견했다는 것을 의미하는 것으로 생각합니다. 이제는 완전히 구식 인 기능입니다. –

+0

파일을 다운로드 할 수있는 더 좋은 방법이 있습니까? 내가 말할 수있는 한, 이것은 (FTP 응용 프로그램을 자동화하지 않고) 가장 간단하고 권장할만한 방법이었습니다. – Dov