Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 将图像保存到grails中web app下的文件夹_Image_Grails_Grails 2.0 - Fatal编程技术网

Image 将图像保存到grails中web app下的文件夹

Image 将图像保存到grails中web app下的文件夹,image,grails,grails-2.0,Image,Grails,Grails 2.0,我需要将图像保存到应用程序中的文件夹中。到目前为止,我已经学会了将图像保存到数据库中,但我需要将其保存到文件夹中。我该怎么做?谁能帮我一下吗?下面是我要保存到数据库中的代码>>> def upload={ def user = User.findById(1) CommonsMultipartFile file = params.list("photo")?.getAt(0) user.avatar = file?.bytes user.save() } 在下面的分

我需要将图像保存到应用程序中的文件夹中。到目前为止,我已经学会了将图像保存到数据库中,但我需要将其保存到文件夹中。我该怎么做?谁能帮我一下吗?下面是我要保存到数据库中的代码>>>

def upload={
  def user = User.findById(1)
    CommonsMultipartFile file = params.list("photo")?.getAt(0)
    user.avatar = file?.bytes
    user.save()
}

在下面的分步实现中,我添加了一个带有uploadForm的GSP页面(默认情况下,它将有多部分表单提交),然后添加了一个控制器函数来处理文件保存请求,以及一个服务方法来将文件保存在指定目录中:

步骤1:创建文件上载表单:

<g:uploadForm name="picUploadForm" class="well form-horizontal" controller="<your-controller-name>" action="savePicture">

    Select Picture: <input type="file" name="productPic"/>
    <button type="submit" class="btn btn-success"><g:message code="shopItem.btn.saveProductImage" default="Save Image" /></button>



</g:uploadForm>
步骤3:在文件上传器服务中(在本例中,名称为FileUploadService的用户定义服务):


在下面的分步实现中,我添加了一个带有uploadForm的GSP页面(默认情况下,它将有多部分表单提交),然后添加了一个控制器函数来处理文件保存请求,以及一个服务方法来将文件保存在指定目录中:

步骤1:创建文件上载表单:

<g:uploadForm name="picUploadForm" class="well form-horizontal" controller="<your-controller-name>" action="savePicture">

    Select Picture: <input type="file" name="productPic"/>
    <button type="submit" class="btn btn-success"><g:message code="shopItem.btn.saveProductImage" default="Save Image" /></button>



</g:uploadForm>
步骤3:在文件上传器服务中(在本例中,名称为FileUploadService的用户定义服务):


您只需将MultiPartFile复制到web app文件夹中即可。这就是为什么:

MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;
CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("myfile");
String fileName = System.currentTimeMillis() + f.name
String destinationFileName = configService.getAbsoluteDocumentsPath() + fileName // We will put it on web-app/documents/xxxxx
f.renameTo(new File(destinationFileName))
//Save filename to database in 
user.avatar = fileName
user.save()
在configService中,我使用了它(用于计算路径)

编辑 要确保您的请求是MutipartHttServletRequest的实例,请添加以下测试

if(request instanceof MultipartHttpServletRequest) {
//Do stuff here
}

不要忘记检查用于输入文件的表单的编码。

您只需将MultiPartFile复制到web app文件夹中即可。这就是为什么:

MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;
CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("myfile");
String fileName = System.currentTimeMillis() + f.name
String destinationFileName = configService.getAbsoluteDocumentsPath() + fileName // We will put it on web-app/documents/xxxxx
f.renameTo(new File(destinationFileName))
//Save filename to database in 
user.avatar = fileName
user.save()
在configService中,我使用了它(用于计算路径)

编辑 要确保您的请求是MutipartHttServletRequest的实例,请添加以下测试

if(request instanceof MultipartHttpServletRequest) {
//Do stuff here
}

别忘了检查文件输入格式的编码。

我已经很容易地解决了这个问题,如下所示。您必须导入以下内容:

导入org.apache.commons.io.FileUtils

导入org.springframework.web.multipart.commons.commons多部分文件

导入org.springframework.web.multipart.*

祝有需要的人好运>>>

def saveImageToFolder = {
    String message = ""
    MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;
    CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("userPhoto")

    if(!f.empty) {
        def usr = User.findByUsername(1)
        if(!usr){
        User user = new User()
        user.username = params.username
        user.avatarType = f.getContentType()

        if(user.save()){
            def userId = user.id
            String username = user.username
            String fileName = username + "." + f.getContentType().substring(6)          // here my file type is image/jpeg
            byte[] userImage = f.getBytes()
            FileUtils.writeByteArrayToFile(new File( grailsApplication.config.images.location.toString() + File.separatorChar + fileName ), userImage )
            message = "User Created Successfully."
        }else{
            message = "Can not Create User !!!"
        }
        }else{
            message = "Username already exists. Please try another one !!!"
        }
    }
    else {
        message = 'file cannot be empty'
    }
    render(view: 'addUser', model:[message: message])
}
并在您的配置文件中粘贴此>>>

images.location = "web-app/images/userImages/"      // after web-app/folder name/folder name and go on if you want to add other folder

我已经很容易地解决了这个问题,如下所示。您必须导入以下内容:

导入org.apache.commons.io.FileUtils

导入org.springframework.web.multipart.commons.commons多部分文件

导入org.springframework.web.multipart.*

祝有需要的人好运>>>

def saveImageToFolder = {
    String message = ""
    MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;
    CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("userPhoto")

    if(!f.empty) {
        def usr = User.findByUsername(1)
        if(!usr){
        User user = new User()
        user.username = params.username
        user.avatarType = f.getContentType()

        if(user.save()){
            def userId = user.id
            String username = user.username
            String fileName = username + "." + f.getContentType().substring(6)          // here my file type is image/jpeg
            byte[] userImage = f.getBytes()
            FileUtils.writeByteArrayToFile(new File( grailsApplication.config.images.location.toString() + File.separatorChar + fileName ), userImage )
            message = "User Created Successfully."
        }else{
            message = "Can not Create User !!!"
        }
        }else{
            message = "Username already exists. Please try another one !!!"
        }
    }
    else {
        message = 'file cannot be empty'
    }
    render(view: 'addUser', model:[message: message])
}
并在您的配置文件中粘贴此>>>

images.location = "web-app/images/userImages/"      // after web-app/folder name/folder name and go on if you want to add other folder

谢谢你的帮助。但f.renameTo>>会显示此消息“无法解析符号'renameTo()”,这意味着您的请求不是MutipartRequest的实例。请参阅editI have your trument>>“如果(multipartttpServletRequest的请求实例){println(“是的,它是multipartttpServletRequest的一部分”)}”,它会打印>>“是的,它是multipartttpServletRequest的一部分”是否确实为输入文件指定了正确的名称?在上面的示例中,它被称为myfile。请检查一下,谢谢你的帮助。但f.renameTo>>会显示此消息“无法解析符号'renameTo()”,这意味着您的请求不是MutipartRequest的实例。请参阅editI have your trument>>“如果(multipartttpServletRequest的请求实例){println(“是的,它是multipartttpServletRequest的一部分”)}”,它会打印>>“是的,它是multipartttpServletRequest的一部分”是否确实为输入文件指定了正确的名称?在上面的示例中,它被称为myfile。检查pleaseit是否显示request.getFile>>无法解析符号“request.getFile”的消息不应该,但您可以尝试导入包javax.servlet.http.HttpServletRequest,您使用的是哪个grails版本?我使用的是grails 2.1.0它显示了request.getFile>>无法解析符号'request.getFile'的消息不应该,但是您可以尝试导入包javax.servlet.http.HttpServletRequest,您使用的是哪个grails版本吗?我使用的是grails 2.1.0