【问题标题】:What is wrong with this upload in Grails?Grails 中的这个上传有什么问题?
【发布时间】:2014-10-29 09:18:59
【问题描述】:

在我的应用程序中,我需要上传照片。我希望用户首先创建相册文件夹,然后单击该相册,然后上传照片。我的相册有:ID、album_name、用户名和我的照片:ID、album_ID、photo_name、类型

相册控制器:

 import java.io.File
import grails.plugin.springsecurity.annotation.Secured
import java.text.SimpleDateFormat

@Secured(['ROLE_USER','ROLE_ADMIN', 'IS_AUTHENTICATED_FULLY'])

class AlbumController {

    def springSecurityService

    def index() { }

    def create(){
        def user = User.get(springSecurityService.currentUser.id)

        def album = new Album()
        album.a_name = params.name
        album.user = user
        album.save(failOnError:true)

        def photo = new Photo()
        def uploadedFile = request.getFile('myFile')
        def name = System.currentTimeMillis()

        if (uploadedFile.empty) {
            flash.message = 'file cannot be empty'
            redirect (action:'index')
            return
        }

        photo.type = uploadedFile.contentType
        photo.p_name = name
        photo.album = album

        uploadedFile.transferTo(new File("../test101111/web-app/album/" + user.username + "/"+ photo.getP_name() + ".jpg"))
        //response.sendError(200, 'Done')

        photo.save(failOnError:true)
        redirect (action:'index')

    }

}

照片控制器:

import java.io.File
import grails.plugin.springsecurity.annotation.Secured
import java.text.SimpleDateFormat

@Secured(['ROLE_USER','ROLE_ADMIN', 'IS_AUTHENTICATED_FULLY'])

class PhotoController {
    def springSecurityService

    def index() { }
    def create(){
        def photo = new Photo()
        def uploadedFile = request.getFile('myFile')
        def name = System.currentTimeMillis()

        if (uploadedFile.empty) {
            flash.message = 'file cannot be empty'
            redirect (action:'index')
            return
        }
        photo.type = uploadedFile.contentType
        photo.p_name = name
        photo.album = params.albumId
        uploadedFile.transferTo(new File("../test101111/web-app/album/" + photo.getP_name() + ".jpg"))
        //response.sendError(200, 'Done')
        photo.save(failOnError:true)
        redirect (action:'index')
    }
}

照片查看:

<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="layout" content="main" />
<title>Photo</title>
<script
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
    $(document).ready(function() {
        $("span.button").click(function() {
            $("form.forma_album").toggle();
        });
    });
</script>

</head>
<body>
    <div class="body">
        <div class="album_title">
            <span class="title1">Fotografije</span>
            <div class="new_album">
                <img class="plus" src="${resource(dir: 'images', file: 'plus.png')}" />
                <span class="button">Dodaj novu sliku</span>
            </div>
        </div>
        <hr class="usual">
        <g:uploadForm action="create" class="forma_album">
            <input type="file" name="myFile" />
            <input type="submit" />
        </g:uploadForm>
    </div>
</body>
</html>

相册视图:

<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="layout" content="main" />
<title>Album</title>
<script
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
    $(document).ready(function() {
        $("span.button").click(function() {
            $("form.forma_album").toggle();
        });
    });
</script>
</head>
<body>
    <div class="body">

        <div class="album_title">
            <span class="title1">Foto albumi</span>
            <div class="new_album">
                <img class="plus" src="${resource(dir: 'images', file: 'plus.png')}" />
                <span class="button">Kreiraj novi album</span>
            </div>
        </div>
        <hr class="usual">
        <g:form action="create" class="forma_album">
            <g:textArea class="album_name" name="name" placeholder="Ime albuma"></g:textArea>
            <g:submitButton class="submit2" name="Dodaj" />
        </g:form>
        <g:each in="${albums}" var="album">
            <g:link controller="photo" action="index" class="contact"
                params="[albumId: album.id]">
                ${album.a_name}
            </g:link>
        </g:each>
        <%--<g:uploadForm action="create" class="forma_album">
<g:textArea class="album_name" name="name" placeholder="Ime albuma"></g:textArea>
<input type="file" name="myFile" />
<input type="submit" />
</g:uploadForm>

--%>
        <div>
            <%--<g:each in="${albums}" var="album" class="picture">
<div class="picture">
<img src="${resource(dir: 'images', file: 'picture.png')}" />
<div class="album_name">
${album.a_name}
</div>
</div>
</g:each>
--%>
        </div>
    </div>


</body>
</html>

我的错误是:没有方法签名:org.springframework.security.web.servletapi.HttpServlet3RequestFactory$Servlet3SecurityContextHolderAwareRequestWrapper.getFile() 适用于参数类型:(java.lang.String) 值:[myFile] 可能的解决方案: getXML()、getPart(java.lang.String)、getAt(java.lang.String)、getAt(java.lang.String)、getLocale()、getJSON()

怎么了?对不起我的英语,谢谢你的回答;)

【问题讨论】:

  • 与您的问题无关,但我想指出 def user = User.get(springSecurityService.currentUser.id) 是多余的。 springSecurityService.currentUser 使用存储在安全主体中的 id 从数据库加载用户实例,然后您正在执行另一个查询以加载相同的实例。幸运的是,Hibernate 缓存了第一个 get() 调用并返回相同的实例,但您可以将代码更改为 def user = springSecurityService.currentUser
  • 另外,当文件可能为空时(一旦您解决了当前问题),您为什么要保存相册?没有事务处于活动状态,也没有回滚,因此 save() 将存储额外的专辑实例。

标签: grails


【解决方案1】:

您可以在BuildConfig.groovyapplication.properties 中设置grails.servlet.version = "2.5"

使用request.getPart(String) 代替request.getFile(String)

JavaDoc on Part interface

【讨论】:

  • 我把 request.getPart 现在我有这个错误 Cannot get property 'empty' on null object
  • 查看我添加的链接。 Part 接口中没有 isEmpty() 方法,但您可以使用 !part.size 代替。 uploadedFile.transferTo() 也应该改变
【解决方案2】:

能否请您打印参数并将它们粘贴到此处。 或者,您可以尝试使用 request.getInputStream()。

【讨论】:

    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 2021-09-27
    • 2019-04-08
    • 2015-11-29
    • 1970-01-01
    • 2012-05-26
    • 2021-08-20
    • 2015-09-23
    相关资源
    最近更新 更多