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