Загрузить файл в AppBine Blobs Store от клиента Gwt - IllegalStateException - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь загрузить файл в appengine blobstore в стандартной среде.Пытался следовать руководству по google appengine для java Но вместо jsp я использую gwt.

Поэтому я сначала получаю URL для отправки файла в appengine blobstoreService.createUploadUrl("/uploadFile")

я отправляю форму.

Вызван сервлет, назначенный пути "/ uploadFile", но

Я получаю

java.lang.IllegalStateException: Must be called from a blob upload callback request.
    at com.google.appengine.api.blobstore.BlobstoreServiceImpl.getUploads(BlobstoreServiceImpl.java:183)
    at brandeira.morholt.web.server.Upload.doPost(Upload.java:44)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)...

Я не вызываю напрямую этот сервлет, единственное, на что я ссылаюсь, это на blobstoreService.createUploadUrl("/uploadFile")

Мой клиент Gwt:

import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.FileUpload;

final FormPanel formPanel = new FormPanel();
formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
formPanel.setMethod(FormPanel.METHOD_POST);

final FileUpload fileUpload = new FileUpload();
panel.add(fileUpload);

Button uploadButton = new Button("carregar");
uploadButton.addClickHandler(new ClickHandler() {
                @Override
                public void onClick(ClickEvent event) {
                        formPanel.submit();
                }


            });

panel.add(uploadButton);

myService.getBlobFileURL(projectName, fileName, new AsyncCallback<BlobURL>() {
            @Override
            public void onSuccess(BlobURL result) {
                formPanel.setAction(result.getUrl());
            }
            @Override
            public void onFailure(Throwable caught) {
            }
        });

И на MyServiceImpl (RemoteServiceServlet):

public BlobURL getBlobFileURL(WebUser user) throws Exception {
     BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    return new BlobURL(blobstoreService.createUploadUrl("/uploadFile"));
}

Upload.java:

private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) {

        Map<String, List<BlobKey>> uploadedBlobs = **blobstoreService.getUploads(req)**; // exception here 

Мой web.xml:

  <applicationContext-param>
    <param-name>maxSize</param-name>
    <param-value>2096000</param-value>
    <!-- <param-value>1024000</param-value> -->
  </applicationContext-param>

  <applicationContext-param>
    <param-name>corsDomainsRegex</param-name>
    <param-value>.*</param-value>
  </applicationContext-param>

  <servlet>
    <servlet-name>Uploada</servlet-name>
    <servlet-class>brandeira.morholt.web.server.Upload</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>Uploada</servlet-name>
    <url-pattern>/uploadFile</url-pattern>
  </servlet-mapping>

Можете ли вы помочь мне с этим?Спасибо! * * 1030

...