2014-12-05 2 views
1

아주 잘 작동하는 플라스크 API가 있습니다. 최근에는 파일 업로드 섹션을 추가했습니다. 일부 서버 측 코드는 api에 호출을 전송하며,이 호출은 차례로 이러한 업로드 된 파일의 처리를 트리거합니다. api 호출 자체에는 파일의 절대 경로가 포함됩니다. 따라서 다음과 같이 정의 된 경로가 있습니다 :플라스크 API 끝점으로 URL 보내기

@app.route('/Uploads/<string:userId>/<string:pathToFile>', methods=['POST']) 

업로드를 처리하는 코드는 PHP입니다. 경로가 api로 전송되기 전에 슬래시를 이스케이프 처리하여 % 기호로 바꾸는 방법을 통해 전송됩니다. 이 방법은 익숙한 사용자를 위해 urlencode이라고합니다.

내가 가지고있는 문제는 플라스크가 경로를 인식하지 못한다는 것입니다. 위의 예에서

localhost:5000/Uploads/testuser/%2Fhome 

, 내가 % 문자가 문제를 일으키는 생각 : 요청은로 간단 경우에도 실패합니다. 삭제하면 요청이 성공합니다. 나 PF가 string 대신 path 자리 표시자를 사용하여 제안 그것에서 How to pass file path in a REST API ala Dropbox using Flask-RESTful? :

나는 관련을 보인다 SO 다음의 게시물을 발견했다. 내 코드에서 그렇게 해보려는 시도 :

나는 원시 경로 (URL 인코딩을 통과하지 못했음)를 전달했습니다. 그러나 이것은 효과가 없었습니다.

누군가 플라스크 API 호출을 통해 URL이나 경로를 전달하는 적절한 방법을 알고 있습니까?

+0

으로 시도한 이유가 무엇입니까? – quantumtremor

답변

1

첫 문자로 슬래시 (/ 또는 %2F)를 전달할 수 있습니다. 이 작업을 수행하지 마십시오. 그렇지 않으면 작성된 엔드 포인트가 Flask와 일치하지 않습니다.

당신과 같이 베어 예를 시도 :

@app.route('/Uploads/<string:userId>/<path:pathToFile>') 
def hello_world(userId, pathToFile): 
    return '{uid} {path}'.format(uid=userId, path=pathToFile) 

이 예상 된 응답을 렌더링 않습니다.

또한 함수 매개 변수를 검토하여 URL 매개 변수와 정렬되는지 확인하십시오. 또한 귀하의 요청이 GET이 아닌 POST인지 확인하십시오. 그렇지 않으면 Method Not Allowed 오류가 표시됩니다.

+0

앞쪽 슬래시가 문제라는 것이 옳았습니다. 새로운 결과가 매우 긴 API 호출처럼 보이기 때문에 그것은 나에게 혼란스러워 보입니다. 그러나 그것이 플라스크가하는 방식이라고 생각합니다. – melchoir55

관련 문제