有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java上载文件失败,原因是Vaadin Spring PlupLocaddon

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

我不知道为什么会出现这种警告。我检查了整个插件,看到了一些JavaScript的用法,它们使用了那篇文章,但我不明白为什么它会抛出一些警告,根本不起作用

我在没有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>

当前技术:


共 (1) 个答案

  1. # 1 楼答案

    这是不支持开箱即用的

    原因是,URL /pluploader-upload-action没有被Vaadin的servlet处理。Vaadin的servlet的真正URL是/vaadinServlet。Vaadin使用根URL上的ServletForwardingController和/Vaadin注册一个SimpleUrlHandlerMapping。 对于其他URL,您需要自己注册

    试试这个解决方法

    在应用中。特性:

    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;
      }
    }
    

    禁用multipart是为了允许Plupload加载项处理multipart部分,否则该部分将由Spring处理,并将破坏加载项