groovy télécharger le fichier
Je suis en train d'écrire un programme de transfert de fichier et de la vidéo dans graal/groovy.
Donc, chaque fois que l'utilisateur remplit un formulaire de nouveau le contrôleur télécharge le fichier et enregistre le nom de fichier avec d'autres champs dans la base de données. Donc, voici la procédure de sauvegarde:
def save = {
def streamInstance = new Stream(params)
if(request){
MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;
CommonsMultipartFile uploadedFile = (CommonsMultipartFile)mpr.getFile("myFile");
if(!uploadedFile.empty){
println "helloworld"
println "Class: ${uploadedFile.class}"
println "Name: ${uploadedFile.name}"
println "OriginalFileName: ${uploadedFile.originalFilename}"
println "Size: ${uploadedFile.size}"
println "ContentType: ${uploadedFile.contentType}"
/*
//def webRootDir = servletContext.getRealPath("/")
//def userDir = new File(webRootDir, "/files/${session.user.login}")
//userDir.mkdirs()
uploadedFile.transferTo(new File("/Users/philipperibeiro/ctv/ctv/web-app/files"))
streamInstance.file = uploadedFile.originalFilename
*/
}
else{
flash.message = "file cannot be empty"
}
}
if(!streamInstance.hasErrors() && streamInstance.save(flush : true)){
flash.message = "${message(code: 'default.created.message', args : [message(code: 'stream.label', default:'Stream'), streamInstance.id])}"
redirect(action : "show", id : streamInstance.id)
}
else{
render(view : "create", model : [streamInstance : streamInstance])
}
}
J'obtiens cette erreur:
Erreur 500: l'Exécution de l'action [enregistrer] du contrôleur [ctv.StreamController] causé exception: Ne peut pas lancer de l'objet "org.apache.catalina.core.ApplicationHttpRequest@19f46c5d" avec la classe " org.apache.catalina.de base.ApplicationHttpRequest "à la classe" org.springframework.web.multipart.MultipartHttpServletRequest'
Servlet: graal
URI: /ctv/graal/stream/enregistrer.envoi
Message de l'Exception: Ne peut pas lancer de l'objet "org.apache.catalina.core.ApplicationHttpRequest@19f46c5d" avec la classe " org.apache.catalina.de base.ApplicationHttpRequest "à la classe" org.springframework.web.multipart.MultipartHttpServletRequest'
Causés par: Impossible de convertir l'objet 'org.apache.catalina.core.ApplicationHttpRequest@19f46c5d" avec la classe " org.apache.catalina.de base.ApplicationHttpRequest "à la classe" org.springframework.web.multipart.MultipartHttpServletRequest'
Catégorie: StreamController
En Ligne: [22]
Extrait De Code:
quelqu'un pourrait donner un indice de l'oms pour la réparer?
<%@ page import="ctv.Stream" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="layout" content="main" />
<g:set var="entityName" value="${message(code: 'stream.label', default: 'Stream')}" />
<title><g:message code="default.create.label" args="[entityName]" /></title>
<jqfu:resources tmpl=”false” />
</head>
<body>
<div class="nav">
<span class="menuButton"><a class="home" href="${createLink(uri: '/')}"><g:message code="default.home.label"/></a></span>
<span class="menuButton"><g:link class="list" action="list"><g:message code="default.list.label" args="[entityName]" /></g:link></span>
</div>
<div class="body">
<h1><g:message code="default.create.label" args="[entityName]" /></h1>
<g:if test="${flash.message}">
<div class="message">${flash.message}</div>
</g:if>
<g:hasErrors bean="${streamInstance}">
<div class="errors">
<g:renderErrors bean="${streamInstance}" as="list" />
</div>
</g:hasErrors>
<g:form action="save" >
<div class="dialog">
<table>
<tbody>
<tr class="prop">
<td valign="top" class="name">
<label for="district"><g:message code="stream.district.label" default="District" /></label>
</td>
<td valign="top" class="value ${hasErrors(bean: streamInstance, field: 'district', 'errors')}">
<g:select name="district.id" from="${ctv.District.list()}" optionKey="id" value="${streamInstance?.district?.id}" />
</td>
</tr>
<tr class="prop">
<td valign="top" class="name">
<label for="dateAdded"><g:message code="stream.dateAdded.label" default="Date Added" /></label>
</td>
<td valign="top" class="value ${hasErrors(bean: streamInstance, field: 'dateAdded', 'errors')}">
<g:datePicker name="dateAdded" precision="day" value="${streamInstance?.dateAdded}" />
</td>
</tr>
<tr class="prop">
<td valign="top" class="name">
<label for="name"><g:message code="stream.name.label" default="Name" /></label>
</td>
<td valign="top" class="value ${hasErrors(bean: streamInstance, field: 'name', 'errors')}">
<g:textField name="name" maxlength="30" value="${streamInstance?.name}" />
</td>
</tr>
<tr class="prop">
<td valign="top" class="name">
<label for="description"><g:message code="stream.description.label" default="Description" /></label>
</td>
<td valign="top" class="value ${hasErrors(bean: streamInstance, field: 'description', 'errors')}">
<g:textField name="description" maxlength="100" value="${streamInstance?.description}" />
</td>
</tr>
<tr class="prop">
<td valign="top" class="name">
<label for="media"><g:message code="stream.media.label" default="Media" /></label>
</td>
<td valign="top" class="value ${hasErrors(bean: streamInstance, field: 'media', 'errors')}">
<g:textField name="media" maxlength="30" value="${streamInstance?.media}" />
</td>
</tr>
<tr class="prop">
<td valign="top" class="name">
<label for="file"><g:message code="stream.file.label" default="File" /></label>
</td>
<td valign="top" class="value ${hasErrors(bean: streamInstance, field: 'file', 'errors')}">
<!--g:textField name="file" maxlength="30" value="${streamInstance?.file}" />-->
<g:form action="save" enctype="multipart/form-data">
<input type="file" name="myFile" />
</g:form>
</td>
</tr>
<tr class="prop">
<td valign="top" class="name">
<label for="logo"><g:message code="stream.logo.label" default="Logo" /></label>
</td>
<td valign="top" class="value ${hasErrors(bean: streamInstance, field: 'logo', 'errors')}">
<g:textField name="logo" value="${streamInstance?.logo}" />
</td>
</tr>
<tr class="prop">
<td valign="top" class="name">
<label for="published"><g:message code="stream.published.label" default="Published" /></label>
</td>
<td valign="top" class="value ${hasErrors(bean: streamInstance, field: 'published', 'errors')}">
<g:checkBox name="published" value="${streamInstance?.published}" />
</td>
</tr>
</tbody>
</table>
</div>
<div class="buttons">
<span class="button"><g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" /></span>
</div>
</g:form>
</div>
</body>
</html>
OriginalL'auteur cybertextron | 2012-03-17
Vous devez vous connecter pour publier un commentaire.
La cause du message d'erreur
Le problème avec ton code, c'est que vous êtes un moulage de la demande objet de la mauvaise classe. C'est la partie du message d'erreur qui vous dit ceci:
Si vous avez un
org.apache.catalina.core.ApplicationHttpRequest
et on essaie de la convertir en uneorg.springframework.web.multipart.MultipartHttpServletRequest
qui ne peut être fait.La beauté de groovy (graal qui est écrit sur), c'est qu'il est typées dynamiquement. Ainsi, la plupart de ce casting est redondant quand même!
Essayez de remplacer ces deux lignes
:
Mais cela ne résoudra pas votre problème! Il suffit de changer le message d'erreur que vous obtenez :'(
La racine de la source du problème, et comment en sommes-nous avec la mauvaise classe de requête?
Réflexion au sujet de pourquoi vous avez le mauvais type de demande pour le casting, vous pourriez avoir oublié d'inclure
enctype="multipart/form-data"
dans votre formulaire d'action. Il doit probablement ressembler à quelque chose comme ceci:Simplement de changer cela pourrait résoudre votre problème, mais je voudrais supprimer définitivement le casting aussi.
Mise à jour: le vrai(?) réponse
En HTML (et les fournisseurs de services internationaux sont utilisés pour faire du HTML) vous ne pouvez pas avoir des formulaires imbriqués. Un formulaire ne peut pas être à l'intérieur de l'autre. Votre GSP a deux formes, la première ressemble à ceci:
La seconde (l'intérieur de l'un ressemble à ceci
Si vous avez besoin de se débarrasser de l'intérieur de l'un complètement, et assurez-vous que l'extérieur de l'un (le seul restant) ressemble à ceci:
le rôle de problème de demande.getFile()
Ok, essayez cette
println "Request class: ${request.class}"
tout de suite après laif (request) {
ligne. Il nous dira dans quelle classe de la demande et nous pouvons aller à partir de là.Demande de classe: la classe org.apache.catalina.de base.ApplicationHttpRequest
Êtes-vous d'obtenir ce message d'erreur lorsque vous téléchargez le fichier, ou tout simplement lorsque vous essayez d'afficher la page? Aussi, veuillez inclure le SPG de code dans votre question, il pourrait nous aider à trouver le problème.
OriginalL'auteur David
Je pense que vous pouvez être plus compliquer cette. Tout ce que nous faisons est
Que vous voulez vérifier le type mime.
que voulez-vous dire?
OriginalL'auteur chrislovecnm
Une autre façon, vous pouvez utiliser le Graal téléchargement de fichier plugin. Voir plus d'informations ici http://grails.org/plugin/file-uploader. Il dispose d'un solide interface et fournit de riches capacités à faire vraiment belle partie de votre application.
OriginalL'auteur Artemis
Vous obtenez l'exception
parce que vous n'avez pas ajouté
enctype
le formulaire doit ressembler à
OriginalL'auteur Rahul