Printemps de téléchargement de fichiers - mise en Attend MultipartHttpServletRequest: est un MultipartResolver configuré? erreur

Je vais essayer d'intégrer télécharger plusieurs fichiers à la fonctionnalité dans mon Angulaire de l'application web à l'aide de angulaire de téléchargement de fichier. Actuellement, l'extrémité avant de la fonctionnalité fonctionne, mais chaque tentative de téléchargement jette un

java.lang.IllegalStateException,java.io.IOException]: 
    java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: 
        is a MultipartResolver configured?

exception.

Le Téléchargement Contrôleur est défini comme

@Controller
@PropertySource("classpath:application.properties")
public class FileUploadController {

    @Resource
    private Environment env;

    @RequestMapping(value = "/fileupload", method = RequestMethod.POST)
    @ResponseBody
    public List<String> fileUpload(@RequestParam("file") MultipartFile[] uploadFiles) throws IllegalStateException, IOException {
        //file processing logic
    }
 }

Dans mon AppConfig.java classe, je déclarer le bean

@Bean
public CommonsMultipartResolver commonsMultipartResolver(){
    CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
    commonsMultipartResolver.setDefaultEncoding("utf-8");
    commonsMultipartResolver.setMaxUploadSize(50000000);
    return commonsMultipartResolver;
}

et démarrer l'application web avec

@Override
public void onStartup(ServletContext servletContext) throws ServletException {

    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    ctx.register(AppConfig.class);
    servletContext.addListener(new ContextLoaderListener(ctx));

    ctx.setServletContext(servletContext);
    ctx.refresh();

    Dynamic servlet = servletContext.addServlet(SERVLET_NAME, new DispatcherServlet(ctx));
    servlet.addMapping("/");
    servlet.setLoadOnStartup(1);
    //servlet.setMultipartConfig(ctx.getBean(MultipartConfigElement.class));
}

Je ne pense pas que c'est en raison de l'absence d'un <form> élément dans mon Angulaire de vue, parce que je peux voir Content-Tyle est multipart/form-data et que la Demande de la Charge utile est définie correctement.

Remote Address:192.168.33.10:80
Request URL:http://dev.jason.com/rest/fileupload
Request Method:POST
Status Code:500 Internal Server Error
Request Headers
  Accept:*/*
  Accept-Encoding:gzip,deflate
  Accept-Language:en-US,en;q=0.8
  Cache-Control:no-cache
  Connection:keep-alive
  Content-Length:415235
  Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryBHlsldPQysTVpvwZ
  Host:dev.jason.com
  Origin:http://dev.jason.com
  Pragma:no-cache
  Referer:http://dev.jason.com/
  User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36
Request Payload
   ------WebKitFormBoundaryBHlsldPQysTVpvwZ
   Content-Disposition: form-data; name="file"; filename="IMG_5072.jpg"
   Content-Type: image/jpeg

   ------WebKitFormBoundaryBHlsldPQysTVpvwZ--

Notez que ce problème se produit toujours lorsque y compris

@Bean
public MultipartConfigElement multipartConfigElement(){
    MultipartConfigFactory multipartConfigFactory = new MultipartConfigFactory();
    multipartConfigFactory.setMaxFileSize("10MB");
    multipartConfigFactory.setMaxRequestSize("50MB");
    return multipartConfigFactory.createMultipartConfig();
}

dans AppConfig.java et de décommenter la commande

servlet.setMultipartConfig(ctx.getBean(MultipartConfigElement.class));

dans ma servlet initialiseur de classe.

Toute aide est très appréciée!

  • Pour l'un, ne pas inscrire les ctx contexte à la fois avec le ContextLoaderListener et la DispatcherServlet.
  • Quel est le raisonnement derrière cela?
  • stackoverflow.com/questions/11708967/...
  • ok, mais quel est le rapport avec la question actuelle?
  • Il n'a pas. C'est juste des conseils. Il peut vous affecter négativement dans les autres cas.
  • OK, l'apprécier. En gros, j'ai suivi une autre configuration de l'application, et que l'on a utilisé le même ctx variable pour les deux ContextLoaderListener et DispatcherServlet. Donc, je me demande comment ce genre de configuration.
  • Le DispatcherServlet, à certains moments, va à la WebApplicationContext chargé par le ContextLoaderListener pour les haricots. Si vous utilisez le même contexte à la fois, vous risquez de vous retrouver avec des doublons d'enregistrements. Êtes-vous sûr qu'ils n'ont pas ré-initialiser/affectation de la variable?

InformationsquelleAutor Jason | 2014-11-20