如何使用grails将文件上传到服务器目录? [英] how to upload file into server directory with grails?

查看:143
本文介绍了如何使用grails将文件上传到服务器目录?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将文件上传到服务器目录..
如果我的项目位于D:\myapp并且我使用cmd运行d:\myapp grails run-app
当我运行此应用程序和其他电脑运行它并上传文件..它会保存ini电脑服务器目录D:\myapp\upload?



我试试这个ini gsp。

 < g:form action =listenctype =multipart / form-datauseToken =true> 
< span class =button>
< input type =filename =filecsv/>
< input type =buttonclass =uploadvalue =Upload
onclick ='location.href =$ {createLink(url:[action:'upload'])} />
< / span>
< / g:表格>

def upload = {

def f = request.getFile('filecsv')
if(f.empty){
flash.message = '文件不能为空'
render(view:'list')
return
}

f.transferTo(new File('C:\Users\\ \\ meta \Documents\workspace-sts-2.5.2.RELEASE\wawet\wallet\uploads\file_name.csv'))
response.sendError(200,'完成')
}

这是错误:

  2014-02-03 10:43:02,706 [http-8080-2] ERROR errors.GrailsExceptionResolver  - 没有方法签名:org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper.getFile ()适用于参数类型:(java.lang.String)values:[filecsv] 
可能的解决方案:getXML(),getAt(java.lang.String),getAt(java.lang.String),getLocale (),getJSON(),getHeader(java.lang.String)
groovy.lang.MissingMethodException:没有签名hod:org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper.getFile()适用于参数类型:(java.lang.String)values:[filecsv]
可能的解决方案:getXML(),getAt(java。 (String.lang.String),getAt(java.lang.String),getLocale(),getJSON(),getHeader(java.lang.String)
at com.teravin.wallet.LoanAccountController $ _closure12.doCall(com.teravin .wallet.LoanAccountController:308)
在com.teravin.wallet.LoanAccountController $ _closure12.doCall(com.teravin.wallet.LoanAccountController)$ b $在java.lang.Thread.run(Thread.java:744 )


解决方案

目的地只是像Java一样的文件。

  def f = request.getFile('some_file')

//验证文件或做某事疯狂hehehe

//现在传输文件
def webrootDir = servletContext.getRealPath(/)// app目录
文件fileDest = new File(webrootDir,images / some_folder )
f.transferTo(fileDest)

  def homeDir = new File(System.getProperty(user.home))// user home eg / home / username for unix 
file fileDest = new File(homeDir,path / to / some_folder)
f.transferTo(fileDest)

向下投票者的更新:假设您的应用具有适当的权限,您可以写入任何文件系统位置。

<



更新
为什么您的 getFile

code>不工作,您没有提交表单:

 < g:form action =list enctype =multipart / form-datauseToken =true> 

< span class =button>
< input type =filename =filecsv/>
< input type =buttonclass =upload
value =Upload
onclick ='location.href =$ {createLink(url:[action:'upload' ])}'/>

< / span>

< / g:表格>

应该是:

 < g:form action =uploadenctype =multipart / form-datauseToken =true> 

< span class =button>
< input type =filename =filecsv/>
< input type =submitclass =uploadvalue =upload/>

< / span>

< / g:表格>

如果您需要使用JavaScript,您应该提交表单,而不是将链接添加到其他页面。 / p>

how to upload file into server directory.. if my project at D:\myapp and i run with cmd d:\myapp grails run-app when i run this app and other Computer run it and upload file..it will save ini computer server in directory D:\myapp\upload ?

i try this ini gsp.

<g:form action="list" enctype="multipart/form-data" useToken="true">
    <span class="button">
        <input type="file" name="filecsv"/>
        <input type="button" class="upload" value="Upload"
               onclick='location.href = "${createLink(url: [action: 'upload'])}"'/>
    </span>
</g:form>

def upload = {

    def f = request.getFile('filecsv')
    if (f.empty) {
        flash.message = 'file cannot be empty'
        render(view: 'list')
        return
    }

    f.transferTo(new File('C:\Users\meta\Documents\workspace-sts-2.5.2.RELEASE\wawet\wallet\uploads\file_name.csv'))
    response.sendError(200, 'Done')
}

this is the error :

2014-02-03 10:43:02,706 [http-8080-2] ERROR errors.GrailsExceptionResolver  - No signature of method: org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper.getFile() is applicable for argument types: (java.lang.String) values: [filecsv]
Possible solutions: getXML(), getAt(java.lang.String), getAt(java.lang.String), getLocale(), getJSON(), getHeader(java.lang.String)
groovy.lang.MissingMethodException: No signature of method: org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper.getFile() is applicable for argument types: (java.lang.String) values: [filecsv]
Possible solutions: getXML(), getAt(java.lang.String), getAt(java.lang.String), getLocale(), getJSON(), getHeader(java.lang.String)
        at com.teravin.wallet.LoanAccountController$_closure12.doCall(com.teravin.wallet.LoanAccountController:308)
        at com.teravin.wallet.LoanAccountController$_closure12.doCall(com.teravin.wallet.LoanAccountController)
        at java.lang.Thread.run(Thread.java:744)

解决方案

The destination is only a file like in Java.

def f = request.getFile('some_file')

//validate file or do something crazy hehehe

//now transfer file
def webrootDir = servletContext.getRealPath("/") //app directory
File fileDest = new File(webrootDir,"images/some_folder")
f.transferTo(fileDest)

OR

def homeDir = new File(System.getProperty("user.home")) //user home e.g /home/username for unix 
File fileDest = new File(homeDir,"path/to/some_folder")
f.transferTo(fileDest)

UPDATE for the down voters: You can write to any file system location assuming your app have the appropriate permissions.

servletContext is available in every grails controller.

UPDATE As per why your getFile is not working, you are not submitting your form:

<g:form action="list" enctype="multipart/form-data" useToken="true">

<span class="button">                   
                    <input type="file" name="filecsv"/>
                    <input type="button" class="upload"
                                        value="Upload"
                                        onclick='location.href = "${createLink(url: [action: 'upload'])}"'/>

            </span>

</g:form>

Should be:

<g:form action="upload" enctype="multipart/form-data" useToken="true">

<span class="button">                   
                    <input type="file" name="filecsv"/>
                    <input type="submit" class="upload" value="upload"/>

            </span>

</g:form>

if you need to use javascript you should submit the form instead of adding a link to another page.

这篇关于如何使用grails将文件上传到服务器目录?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆