2017-02-16 4 views
1

로컬 개발 서버에서 일부 GAE 코드를 디버깅하려고하지만 벽에 부딪혔습니다. 이 코드는 Google의 Blobstore 서비스를 사용하여 파일 업로드를 용이하게합니다. 이 코드는 프로덕션에서는 잘 작동하지만 로컬 개발 서버에서는 제대로 작동하지 않습니다.Blobstore GAE 클라우드 도구 및 로컬 개발 서버의 문제

내 서블릿에서 blobstoreService.createUploadUrl("/uploadSurvey")의 내 양식 작업을 포함하고 나서 blobstoreService.getUploads(request)을 호출하는 표준 Google 패턴을 사용하고 있습니다.

는 파일이 제대로 (I 로컬 관리 콘솔을 사용하여 볼 수 있습니다) 업로드하지만 getUploads()에 대한 호출이 예외가 발생 : 디버거에서 요청을 보면 java.lang.IllegalStateException: Must be called from a blob upload callback request.

을 요구 blobkey 속성을 찾을 수 없습니다 또한 양식의 다른 입력 매개 변수도 없습니다. 원시 요청 (/ _ah/upload/...에 전달 된 요청)을 보면 양식 매개 변수가 있습니다.

Google 클라우드 도구 인 app-engine-plugin을 사용합니다. 생성 된 전쟁을 실행하기 위해 gcloud python dev 서버를 사용합니다.

필자는 blobstore가 더 오래된 GAE 기능이라는 것을 알고 있지만이 코드는 자극적으로 작동하고 있으므로 새로운 하위 시스템으로 전환하지 않아도됩니다.

누구나 내 실마리를 어디에서 내 dev에 서버에서 작동하도록하는 데 보일 수있는 줄 수 있습니까?

감사합니다,

- 데이브

추신 아래에 업로드 된 파일 후 내 서블릿에 전달 요청이 밖으로 제거되어 있습니다 :

POST /uploadSurvey HTTP/1.1 
Accept-Encoding: identity 
X-APPENGINE-BACKEND-ID: 8 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
X-APPENGINE-SERVER-NAME: localhost 
Cookie: JSESSIONID=5773y31x3eut 
X-Appengine-User-Email: 
X-APPENGINE-DEFAULT-VERSION-HOSTNAME: localhost:8888 
X-APPENGINE-SERVER-PROTOCOL: HTTP/1.1 
X-Appengine-User-Organization: 
X-APPENGINE-DEV-SCRIPT: unused 
ORIGIN: http://localhost:8888 
X-Appengine-User-Id: 
Accept-Language: en-us 
X-APPENGINE-SERVER-SOFTWARE: Development/2.0 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8 
X-Appengine-User-Nickname: 
Host: localhost:8888 
X-Appengine-Dev-Request-Id: wCTAonUKrB 
Content-Type: multipart/form-data; boundary="===============1477989950756010976==" 
Content-Length: 1372 
X-APPENGINE-REQUEST-LOG-ID: 5e8eaef5aff4add89b774badea1fd3a30da8be 
X-Appengine-User-Is-Admin: 0 
UPGRADE-INSECURE-REQUESTS: 1 
X-APPENGINE-SERVER-PORT: 8888 
Referer: http://localhost:8888/settings 
X-AppEngine-Country: ZZ 
X-APPENGINE-REQUEST-ID-HASH: BFD4FDDA 
X-APPENGINE-REMOTE-ADDR: ::1 

업데이트 :이 gcloud의 devserver2 디렉토리에 http_proxy.py에 디버깅을 추가하고이 콘텐츠 형식의 존재를 관찰

전달. 내용이 존재하는 것처럼 보이는 내가 해결 방법을 알아 냈

--===============5516630363169856841== 
Content-Type: message/external-body; blob-key="XOQvaKc1cdczcwkIHfRFOw=="; access-type="X-AppEngine-BlobKey" 
Content-Disposition: form-data; name="myFile"; filename="Naro Group - SNHU - Sales Readiness Assessment - Dec 2016.xls" 

Content-Type: application/vnd.ms-excel 
Content-Length: 164352 
Content-MD5: NjBiNjI0N2M3MjZiMzc3NWMxZDQxYmM5YTU2YmM5YmM= 
content-disposition: form-data; name="myFile"; filename="Naro Group - SNHU - Sales Readiness Assessment - Dec 2016.xls" 
X-AppEngine-Upload-Creation: 2017-02-16 20:17:05.729401 


--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="newSurveyId" 

10001 
--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="newSurveyName" 

N 
--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="newUserMessage" 


--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="selectedClient" 

6 
--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="selectedPsf" 

3 
--===============5516630363169856841== 
Content-Type: text/plain 
Content-Disposition: form-data; name="selectedSection" 

1 
--===============5516630363169856841==-- 

답변

0

나는 ..., 지금은 더 혼란 스러워요,하지만 난 구글 사람들이 볼 필요가 여기에 버그가 있다고 생각 않습니다. Cloud Tools python dev 서버는 모든 중요한 X-AppEngine-BlobUpload 헤더 요소를 다시 작성된 요청 헤더에 넣지 않았습니다. 이렇게하려면 blob_upload.py 및 http_proxy.py를 수정했습니다 (google-cloud-sdk의/devserver2 도구에서). 그런 다음 Google의 자체 프로덕션 서버 코드베이스 인 ParseBlobUploadFilter.java에서 비표준 요청 페이로드를 처리하고 누락 된 요청 속성을 빌드하고 원래 요청 매개 변수에 액세스 할 수있게하는 코드를 강구해야했습니다. 물론이 코드 경로는 로컬 dev 서버에서 실행될 때만 수행되어야합니다. 이 코드는 Google App Engine에서 올바르게 호출됩니다.

관련 문제