簡體   English   中英

Blobstore與GAE雲工具和本地開發服務器有關

[英]Blobstore Issues with GAE Cloud Tools and Local Development Server

我正在嘗試在我的本地開發服務器上調試一些GAE代碼但是已經碰壁了。 該代碼使用Google的Blobstore服務來促進文件上傳。 代碼在生產上工作得很好,但在我的本地開發服務器上卻沒有。

我在我的jsp blobstoreService.createUploadUrl("/uploadSurvey")使用標准的Google模式包括作為我的表單操作,然后在我的servlet中調用blobstoreService.getUploads(request)

文件已正確上傳(我可以使用本地管理控制台查看)但是對getUploads()的調用會拋出異常: java.lang.IllegalStateException: Must be called from a blob upload callback request.

查看調試器中的請求,找不到所需的blobkey屬性,表單中也沒有任何其他輸入參數。 查看原始請求(調度到/ _ah / upload / ...的請求),表單參數存在。

我使用谷歌雲工具app-engine-plugin,它使用gcloud python dev服務器來運行生成的戰爭。

我意識到blobstore是一個較舊的GAE功能,但由於這段代碼在prod上工作,我寧願不必切換到更新的子系統。

任何人都能給我一個線索在哪里看到我的開發服務器上的所有工作?

謝謝,

- 戴夫

ps下面是在上傳文件被刪除后轉發到我的servlet的請求:

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

我想出了一個解決方法,但我確實認為谷歌人需要看一個錯誤。 Cloud Tools python dev服務器沒有將所有重要的X-AppEngine-BlobUpload頭元素放入重寫的請求頭中。 我修改了blob_upload.py和http_proxy.py來執行此操作(在google-cloud-sdk下的tools / devserver2中)。 然后我不得不從Google自己的生產服務器代碼庫ParseBlobUploadFilter.java中加入一些代碼來處理非標准請求有效負載並構建缺少的請求屬性並使原始請求參數可訪問。 當然,只有在本地開發服務器上運行時才應該使用此代碼路徑; 此代碼由Google App Engine正確調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM