【问题标题】:Uploading a File fails with Vaadin Spring PLupload-Addon使用 Vaadin Spring PLupload-Addon 上传文件失败
【发布时间】:2015-11-09 05:50:27
【问题描述】:

如果我想上传带有 Vaadin 特定小部件/插件的文件,我会收到一些警告并且文件不会上传。

我不知道为什么会出现此警告。我正在检查整个插件并看到一些 JavaScript 用法,它们使用了那个 POST,但我不明白为什么它会抛出一些警告并且根本不起作用。

我检查了没有 Spring 集成的插件,一切正常。

这是警告:

2015-08-16_15:44:53.777 WARN  o.s.web.servlet.PageNotFound - Request method 'POST' not supported
2015-08-16_15:44:53.777 WARN  o.s.w.s.m.s.DefaultHandlerExceptionResolver - Handler execution resulted in exception: Request method 'POST' not supported
2015-08-16_15:44:54.937 WARN  o.s.web.servlet.PageNotFound - Request method 'POST' not supported
2015-08-16_15:44:54.938 WARN  o.s.w.s.m.s.DefaultHandlerExceptionResolver - Handler execution resulted in exception: Request method 'POST' not supported
2015-08-16_15:44:55.977 WARN  o.s.web.servlet.PageNotFound - Request method 'POST' not supported
2015-08-16_15:44:55.977 WARN  o.s.w.s.m.s.DefaultHandlerExceptionResolver - Handler execution resulted in exception: Request method 'POST' not supported
2015-08-16_15:44:57.019 WARN  o.s.web.servlet.PageNotFound - Request method 'POST' not supported
2015-08-16_15:44:57.020 WARN  o.s.w.s.m.s.DefaultHandlerExceptionResolver - Handler execution resulted in exception: Request method 'POST' not supported

我的代码如下,一个简单的 init() 功能最少:

protected void init (VaadinRequest request){
    HorizontalLayout root = new HorizontalLayout();
    root.setSizeFull();
    setContent(root);
    setSizeFull();

    PluploadManager manager = new PluploadManager();
    manager.getUploader().setMaxFileSize("10mb");
    manager.getUploader().addFileUploadedListener(new Plupload.FileUploadedListener() {
        public void onFileUploaded(PluploadFile file) {
            Notification.show("I've just uploaded file: " + file.getName());
        }
    });

    manager.getUploader().addErrorListener(new Plupload.ErrorListener() {
        public void onError(PluploadError error) {
            Notification.show("There was an error: " + error.getMessage() + " (" + error.getType() + ")",
                    Notification.Type.ERROR_MESSAGE);
        }
    });

    root.addComponent(manager);
}

这是我在 POM 中的依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
    <groupId>com.vaadin</groupId>
    <artifactId>vaadin-spring-boot-starter</artifactId>
    <version>1.0.0.beta3</version>
</dependency>
<dependency>
    <groupId>pl.exsio</groupId>
    <artifactId>plupload-vaadin</artifactId>
    <version>2.0.0</version>
</dependency>

当前技术:

【问题讨论】:

  • 它在哪里抛出错误/警告?堆栈跟踪也很棒。
  • 在第一个“quotebox”上是我的控制台警告输出,我没有得到任何更多信息,包括日志另外我可以上传演示项目,但总的来说它是 Start Spring 的空白项目带有已编译的 Vaadin 小部件/插件的 Projekt 生成器
  • 你解决了吗?

标签: java spring rest maven vaadin


【解决方案1】:

开箱即用不支持。

原因是 URL /pluploader-upload-action 没有被 Vaadin 的 servlet 处理。 Vaadin servlet 的真实 URL 是/vaadinServlet。 Vaadin 在根 URL(默认情况下)和 /VAADIN 上注册 SimpleUrlHandlerMappingServletForwardingController。 其他网址需要自己注册。

试试这个解决方法。

在 application.properties 中:

multipart.enabled=false

添加以下配置。

@Configuration
public class VaadinPluploadConfiguration {
  private static final String PLUPLOADER_URL = "/pluploader-upload-action";
  @Inject
  private Controller vaadinUiForwardingController;

  @Bean
  public SimpleUrlHandlerMapping vaadinForwardingHandlerMapping() {
    SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
    mapping.setOrder(Integer.MIN_VALUE + 1);
    Map<String, Object> urlMappings = new HashMap<String, Object>();
    urlMappings.put(PLUPLOADER_URL, vaadinUiForwardingController);
    mapping.setUrlMap(urlMappings);
    return mapping;
  }
}

禁用多部分以允许 Plupload 插件处理多部分部分,否则该部分将由 Spring 处理并会破坏插件。

【讨论】:

    猜你喜欢
    • 2016-04-03
    • 2013-12-14
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 2013-12-13
    • 2013-04-07
    相关资源
    最近更新 更多