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 leContextLoaderListener
et laDispatcherServlet
. - 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 deuxContextLoaderListener
etDispatcherServlet
. Donc, je me demande comment ce genre de configuration. - Le
DispatcherServlet
, à certains moments, va à laWebApplicationContext
chargé par leContextLoaderListener
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?
Vous devez vous connecter pour publier un commentaire.
Spring MVC pile exige que le
MultipartResolver
bean être appelémultipartResolver
. Changer votre@Bean
méthode pourou
multipartResolver
mais n'en faites pas clair (du moins pas à ce que j'ai lu) que le nom doit êtremultipartResolver
.<beans:bean id="multipartResolver"> ... </beans:bean>
Il suffit d'ajouter ce pour servler-context.xml
Besoin de rien d'autre.
Vous devez ajouter dans webmvc-context.xml ce: