2012-05-17 5 views
9

플라스크를 익히며 여기에 문서화 된 업로드 파일 패턴을 처리하려고합니다 : http://flask.pocoo.org/docs/patterns/fileuploads/. 필자는 Windows 7에서 Firefox 12에서 작업 중이며 내 로컬 컴퓨터에서 디버그 모드로 내 응용 프로그램을 실행하고 있습니다.플라스크 : 업로드 된 파일을 저장할 때 IOError

UPLOAD_FOLDER = '/uploads'으로 정의한 UPLOAD_FOLDER 변수의 값을 제외하고 예제를 그대로 복사하고 응용 프로그램 루트에있는 "uploads"라는 디렉토리를 만듭니다 (정적 및 템플릿 디렉토리와 함께).). 파일을 업로드하면

, 나는 오류가 발생하고있다 : IOError: [Errno 2] No such file or directory: '/uploads\\u.png'

을 흥미롭게도, 내가 직접 UPLOAD_FOLDER = r'C:\Python27\projects\Flask\myproject\uploads'처럼 내 컴퓨터에 업로드에 직접 가리키는 업로드 폴더에 대한 원시 문자열을 지정하면, 모든 것이 잘 작동합니다.

올바른 방법으로 디렉토리를 지정하지 않습니까? 업로드 디렉토리는 다른 위치에 두어야합니까?

+1

업데이트 :이 순열은 작동하는 것으로 보입니다 : 'UPLOAD_FOLDER ='./uploads/''. 여전히 웹 서버에 배포 할 때 동일한 패턴을 사용해야하는 이유와 이유를 이해하고 싶습니다. – slachterman

답변

12

'/ uploads'의 시작 부분에있는 슬래시는 경로 지정을 절대적으로 만듭니다. 선행 슬래시는 파일 시스템 계층 구조의 루트를 나타냅니다. Windows에서 작동하는 방식이 정확히 그런 것은 아니지만, Python은 경로 처리 기능이 플랫폼 간이므로이 방식으로이 방식을 이해하는 것이 좋습니다.

'uploads /'및 './uploads/'형식은 동일하며 상대적입니다.

상대 경로는 현재 디렉토리와 관련되어 있으므로 반드시 제어 할 필요는 없으므로 UPLOAD_FOLDER의 절대 경로를 지정할 수 있습니다.

+2

Windows에서'/ uploads' (또는'\ uploads')는 현재 드라이브의 루트를 가리 킵니다. 현재 디렉토리가'D : \ Projects \ FlaskTest'이면'D : \ uploads'를 가리 킵니다. – Helgi

32

왜이 기능을 사용하지 않으셔도됩니다.

APP_ROOT = os.path.dirname(os.path.abspath(__file__)) 
UPLOAD_FOLDER = os.path.join(APP_ROOT, 'static/uploads') 
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 
+0

나는이 해결책을 좋아한다. 매우 우아하고 다른 형태보다 덜 허약합니다. – whoisjuan

+0

이것은 좋은 것입니다. – tyan

+0

os.path.join (APP_ROOT, 'static/uploads')은 python 파일이 루트 폴더에있는 경우에만 작동합니다. 파일 실행 경로에 따라 경로를 변경하는 것을 잊지 마십시오. –

관련 문제