Если вы хотите загружать большие файлы, вам определенно нужно будет изучить режим потоковой передачи WCF .
В принципе, вы можете изменить режим передачи на свой привязку; по умолчанию он буферизуется, то есть все сообщение должно буферизироваться на отправителе, сериализоваться, а затем передаваться в целом.
При потоковой передаче вы можете определить одностороннюю передачу (только для загрузки, только для загрузки) или двунаправленной потоковой передачи. Это делается путем установки transferMode вашей привязки к StreamedRequest
, StreamedResponse
или просто Streamed
.
Тогда вам нужно иметь контракт на обслуживание, который либо получает параметр введите Stream
(для загрузки) или вернет значение типа Stream
(для загрузки).
[ServiceContract]
public interface IFileUpload
{
[OperationContract]
bool UploadFile(Stream stream);
}
Это должно быть сделано!
Фильтрующий подход в итоге сработал, но TemplateEngineException
обернут вокруг NestedServletException
.
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.springframework.web.util.NestedServletException;
import org.thymeleaf.exceptions.TemplateEngineException;
/**
* Filter to catch Thymeleaf template errors
*/
public class ThymeleafErrorFilter implements Filter {
@Override
public void init(final FilterConfig filterConfig) {
}
@Override
public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
try {
filterChain.doFilter(servletRequest, servletResponse);
} catch (final NestedServletException nse) {
if(nse.getCause() instanceof TemplateEngineException) {
//Do stuff here
...
}
throw nse;
}
}
@Override
public void destroy() {
}
}
И затем регистрация фильтра
/**
* @return thymeleaf error filter
*/
@Bean
public FilterRegistrationBean thymeleafErrorFilter() {
FilterRegistrationBean thymeleafErrorFilter = new FilterRegistrationBean();
thymeleafErrorFilter.setName("thymeleafErrorFilter");
thymeleafErrorFilter.setFilter(new ThymeleafErrorFilter());
thymeleafErrorFilter.addUrlPatterns("/*");
return thymeleafErrorFilter;
}