파일을 업로드하려면 HTML 양식에 enctype 속성이 multipart/form-data로 설정되어 있어야 합니다. . 파일 유형이 있는 입력 태그는 "찾아보기" 버튼을 생성합니다.
<html> <body> <form enctype = "multipart/form-data" action = "save_file.py" method = "post"> <p>File: <input type = "file" name = "filename" /></p> <p><input type = "submit" value = "Upload" /></p> </form> </body> </html>
출력
이 코드의 결과는 다음 형식입니다. -
위의 예는 우리 서버에 파일을 업로드하는 사람들을 저장하기 위해 의도적으로 비활성화되었지만 서버에서 위 코드를 시도할 수 있습니다.
다음은 save_file.py 스크립트입니다. 파일 업로드 처리 -
#!/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('/tmp/' + fn, 'wb').write(fileitem.file.read()) message = 'The file "' + fn + '" was uploaded successfully' else: message = 'No file was uploaded' print """\ Content-Type: text/html\n <html> <body> <p>%s</p> </body> </html> """ % (message,)
Unix/Linux에서 위의 스크립트를 실행하는 경우 다음과 같이 파일 구분 기호를 교체해야 합니다. 그렇지 않으면 Windows 시스템에서 위의 open() 문이 제대로 작동합니다.
fn = os.path.basename(fileitem.filename.replace("\\", "/" ))