-1

PDFファイルをダウンロードできるURLをご用意しております。問題は、URL を指定する入力テキスト フィールドと送信ボタンがあることです。送信ボタンをクリックすると、関連するファイルがダウンロードされ、解析されてデータベースに保存されます。

4

1 に答える 1

3

ドメインクラス:

class Data {  
    byte[] pdfFile  

    static mapping = {  
        pdfFile sqlType:'longblob'      //use mysql  
    }  

    static constraints = {  
        pdfFile nullable:true  
    }  
} 

gsp ビューを使用して、url をコントローラーに送信します。たとえば、 getFile.gspは次のようになります。

<g:form url="[action:'savePdf',controller:'data']" >  
       <g:textField name="externalUrl" >  
       <g:submitButton name="submit" value="Submit" />  
</g:form>  

データコントローラー:

class DataController {
    def savePdf() {                                  //save pdf file into database  
        def url = params.externalUrl           // for example:'http://moodle.njit.edu/tutorials/downloading_moodle.pdf' 

        def localFile = new FileOutputStream('test.pdf')  
        localFile << new URL(url).openStream()  
        localFile.close()  

        def pdfFile = new FileInputStream('test.pdf')  
        byte[] buf = new byte [102400]  
        byte[] pdfData = new byte[10240000]              //pdf file size limited to 10M  
        int len = pdfFile.read(buf, 0, 102400)  
        ByteArrayOutputStream bytestream = new ByteArrayOutputStream()  
        while(len > 0) {  
            bytestream.write(buf, 0, len)  
            len =pdfFile.read(buf, 0, 102400)  
        }  
        data.pdfFile = bytestream.toByteArray()  
        data.save()  
    }  

    def renderPdf() {                              //for pdf file download  
        def dataInstance = Data.get(params.id)  
        response.setContentType('application/pdf')  
        byte[] pdf = dataInstance?.pdfFile  
        response.outputStream << pdf  
    }  
}

renderPdf() メソッドをトリガーするには、別の gsp ビューにリンクを配置します。たとえば、render.gspとします。

<a href="${createLink(uri:'/data/renderPdf/'+dataInstance.id)}">pdf file</a>  
于 2013-01-11T14:59:31.547 に答える