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>
当前技术:
- Java 1.8
- 瓦丁7.5.3
- 弹簧靴1.3.0。M3(https://start.spring.io/)
- 马文波姆
- Vaadin小部件/加载项:PLupload包装:(https://vaadin.com/directory#!addon/plupload-wrapper-for-vaadin-7x)
# 1 楼答案
这是不支持开箱即用的
原因是,URL
/pluploader-upload-action
没有被Vaadin的servlet处理。Vaadin的servlet的真正URL是/vaadinServlet
。Vaadin使用根URL上的ServletForwardingController
和/Vaadin注册一个SimpleUrlHandlerMapping
。 对于其他URL,您需要自己注册试试这个解决方法
在应用中。特性:
添加以下配置
禁用multipart是为了允许Plupload加载项处理multipart部分,否则该部分将由Spring处理,并将破坏加载项