2017-02-16 12 views
1

Я пытаюсь отладить некоторый код GAE на моем локальном сервере разработки, но попал в стену. В коде используется служба Google Blobstore для облегчения загрузки файлов. Код работает отлично, но не на моем локальном сервере разработки.Проблемы с Blobstore с помощью облачных инструментов и локального сервера GAE

Я использую стандартный шаблон Google для включения в качестве своего действия формы в свой jsp blobstoreService.createUploadUrl("/uploadSurvey"), а затем вызываю blobstoreService.getUploads(request) в свой сервлет.

Файл правильно загружен (я могу видеть его с помощью локальной консоли администратора), но вызов getUploads() бросает исключение: java.lang.IllegalStateException: Must be called from a blob upload callback request.

Глядя на просьбу в отладчике, необходимый blobkey атрибут не найден , а также ни один из других входных параметров в форме. Рассматривая необработанный запрос (тот, который отправлен в/_ah/upload/...), присутствуют параметры формы.

Я использую Google Tools для облачных инструментов, который использует сервер gcloud python dev для запуска созданной войны.

Я понимаю, что blobstore является более старой функцией GAE, но поскольку этот код «работает» на prod, я бы предпочел не переключиться на новую подсистему.

Любой, кто может дать мне ключ, где искать, чтобы все это работало на моем dev-сервере?

Спасибо,

- Dave

P.S. ниже запрос пересылается на мой сервлет после загруженного файла был раздели:

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 

Update:

Я добавил некоторые отладки в http_proxy.py в каталоге gcloud devserver2 и наблюдал этот тип контента существует пересылаются. Я еще больше запутался сейчас, как это выглядит, как содержание присутствует ...

--===============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

я понял, обходной путь, но я думаю, что есть ошибка здесь люди, Google нужно смотреть. Сервер облачных инструментов python dev не помещал все важные элементы заголовка X-AppEngine-BlobUpload в переписанный заголовок запроса. Для этого я изменил blob_upload.py и http_proxy.py (в инструментах/devserver2 под google-cloud-sdk). Затем мне пришлось создать код из собственной производственной базы данных своего сервера, ParseBlobUploadFilter.java, для обработки нестандартной полезной нагрузки запроса и создания отсутствующих атрибутов запроса и предоставления доступных исходных параметров запроса. Конечно, этот путь кода должен выполняться только при работе на локальном dev-сервере; этот код правильно вызывается приложением Google App Engine.