2013-04-15 4 views
1

나는이 코드를 사용하여 웹 사이트의 특정 디렉토리로 파일을 업로드 할 수 있지만 업로드 된 모든 파일 (.txt 파일 만 가능)을 " equations.txt "를 다운로드 한 다음 내 컴퓨터로 다운로드 한 다음 서버에서 삭제합니다.파이썬으로 서버의 파일 이름 바꾸기

"test.txt"라는 파일을 누군가 업로드하는 경우이를 업로드하고 내 서버의 "equations.txt"로 이름을 바꿔야합니다.

지금까지 지금 나는 그것을 업로드 할 수있어,하지만 난 줄을 추가 할 때 :

os.renames ('/ 홈/XXXX/public_html을/xxxx.com/테스트/업로드 /'+ FN를

#! /usr/bin/python 

import cgi, os 
import cgitb; cgitb.enable() 

form = cgi.FieldStorage() 

# Get filename here. 
fileitem = form['filename'] 

# Test if the file was uploaded 
if fileitem.filename: 
    # strip leading path from file name to avoid 
    # directory traversal attacks 
    fn = os.path.basename(fileitem.filename) 
    open('/home/xxxx/public_html/xxxx.com/test/uploads/' + fn, 'wb').write(fileitem.file.read()) 
    message = "The file " + fn + " was uploaded successfully" 
    os.renames('/home/xxxx/public_html/xxxx.com/test/uploads/' + fn, 'equations.txt') ## Error line 

else: 
    message = "No file was uploaded" 

print ("""\ 
Content-type: text/html\n\n 
<html> 
<body> 
    <p>%s</p> 
</body> 
</html> 
""") % (message) 
,691 : 'equations.txt')

그것은 실제로 디렉토리에 "equations.txt"에서 파일 이름을 바꾸는 전적으로 대신 /uploads/ 디렉토리를 삭제 ... 여기에 코드입니다

위의 코드를 추가하지 않고도 코드가 올바르게 작동하고 파일을 /uploads/ 디렉토리에 업로드합니다. 따라서 다음 단계로 넘어 가기 전에 이름 바꾸기가 제대로 작동해야합니다. 감사합니다.

+0

, 동시에 당신의 디자인을 업로드 여러 사용자와 함께 아마 당신이 원하는 방식으로 작동하지 않습니다. 아마도 당신은 이미 이것을 알고 있고 당신의 Q에있는 예제는 단순화되어 있습니다 (이 경우, 감사합니다 :). 단지 FYI입니다. –

+0

맞아. 대중을위한 것이 아니고 개인 액세스 권한이있는 소수의 사람들 만 사용하게 될 것이다. – ratman2050

답변

1

os.renames 대신 os.rename을 사용해 보셨습니까?

또한 dest의 절대 경로를 사용해보십시오. 그래서,이 : 대신의

dest_dir = '/home/xxxx/public_html/xxxx.com/test/uploads/' 
os.rename(dest_dir + fn, dest_dir + 'equations.txt') 

: 여담으로

os.renames('/home/xxxx/public_html/xxxx.com/test/uploads/' + fn, 'equations.txt') 
+0

흥미 롭다, 나는 이것을했고 그것이 파일을 업로드하고 "equations.txt"로 이름을 바꾸는 것 같다. 그러나 그것은 그것을 나의 cgi-bin 디렉토리에 업로드한다 ?? 코드에서 cgi-bin 디렉토리에 대해서도 언급하지 않았습니다 ... – ratman2050

+0

흠, 몇 가지 일이 진행되고있는 것처럼 보입니다. 이름 변경을 위해, 나는 os.rename이 당신이 원하는 것이라고 생각합니다. 파일이있는 곳에서 dest의 절대 경로를 사용해보십시오. 내 대답을 예제로 업데이트하겠습니다. –

+0

완벽하게 일했습니다. 감사합니다. – ratman2050