Grails blob到pdf

Grails blob到pdf,grails,groovy,Grails,Groovy,我已将pdf文件存储为blob,当我尝试在浏览器中将其呈现为pdf时,它如下所示: %PDF-1.4 %���� 5 0 obj <>stream x��[]s�6} 我还尝试添加response.characterEncoding=“utf 8”,但也没有成功 只是想澄清一下:我有一个表单,它将pdf文件存储为blob。一旦对象存储在数据库中,对象和一些参数(名称、日期等)就会出现在我的应用程序中。该名称是可单击的,它将在div中呈现指向blob文件的链接: <g:

我已将pdf文件存储为blob,当我尝试在浏览器中将其呈现为pdf时,它如下所示:

%PDF-1.4 %���� 5 0 obj <>stream x��[]s�6}    
我还尝试添加
response.characterEncoding=“utf 8”
,但也没有成功

只是想澄清一下:我有一个表单,它将pdf文件存储为blob。一旦对象存储在数据库中,对象和一些参数(名称、日期等)就会出现在我的应用程序中。该名称是可单击的,它将在div中呈现指向blob文件的链接:

<g:remoteLink id="${s.id}" update="details"  controller="submitSample"action="showDetails" >${s.sampleNameID}</g:remoteLink></td>
可能的解决方案:getClass()、getAt(groovy.lang.ObjectRange)、getAt(java.lang.Integer)、getAt(groovy.lang.IntRange)、getAt(java.lang.String)、getAt(groovy.lang.Range)


只需使用product.file,就可以得到乱码输出

还可以尝试指定
内容配置

response.contentType = 'application/pdf'
response.setHeader('Content-disposition', 'Attachment; filename=file.pdf')
response.getOutputStream().write(product.file)

还可以尝试指定
内容配置

response.contentType = 'application/pdf'
response.setHeader('Content-disposition', 'Attachment; filename=file.pdf')
response.getOutputStream().write(product.file)

我不确定
product.file
是什么数据类型,但是,假设它是
java.io.file
这应该可以工作

  response.setContentType('application/pdf');
  response.setHeader('Content-disposition', 'Attachment; filename=file.pdf');
  response.getOutputStream().write(product.file.toNewInputStream());
  response.getOutputStream().flush();
但是,如果
product.file
是一个blob,则在将其发送到浏览器响应之前,需要从中取出字节

 response.setContentType('application/pdf');
 response.setHeader('Content-disposition', 'Attachment; filename=file.pdf');
 response.getOutputStream().write(product.file.getBytes());
 response.getOutputStream().flush();

这是未经测试的代码,但我想你明白了。我认为你看到奇怪的字符打印到浏览器输出,因为它只是在做一个toString()你的blob。享受。

我不确定
产品.file
是什么数据类型,但是,假设它是
java.io.file
这应该可以工作

  response.setContentType('application/pdf');
  response.setHeader('Content-disposition', 'Attachment; filename=file.pdf');
  response.getOutputStream().write(product.file.toNewInputStream());
  response.getOutputStream().flush();
但是,如果
product.file
是一个blob,则在将其发送到浏览器响应之前,需要从中取出字节

 response.setContentType('application/pdf');
 response.setHeader('Content-disposition', 'Attachment; filename=file.pdf');
 response.getOutputStream().write(product.file.getBytes());
 response.getOutputStream().flush();


这是未经测试的代码,但我想你明白了。我认为你看到奇怪的字符打印到浏览器输出,因为它只是在做一个toString()你的blob。享受吧。

即使添加了setHeader,我仍然会得到奇怪的字符串。我已经用新的建议更新了我原来的帖子。@tim_yates我没有产品域类。product是一个引用blob对象的变量。我无法理解这一点。Grails从表面上看似乎很简单,但很可能是我做得不对的一件小事使它无法工作。相反,我通过上传文件并将其传输到应用程序内的文件夹,然后在数据库中存储指向该文件的链接,解决了我的问题。这样,我就不必担心渲染blob,因为浏览器会处理这个问题。再一次,我遇到了一些问题,因为人们可能会认为事情会像“Grails In Action”示例所示那样运行,但遗憾的是,我并没有那么容易做到。即使添加了setHeader,我仍然会得到奇怪的字符串。我已经用新的建议更新了我原来的帖子。@tim_yates我没有产品域类。product是一个引用blob对象的变量。我无法理解这一点。Grails从表面上看似乎很简单,但很可能是我做得不对的一件小事使它无法工作。相反,我通过上传文件并将其传输到应用程序内的文件夹,然后在数据库中存储指向该文件的链接,解决了我的问题。这样,我就不必担心渲染blob,因为浏览器会处理这个问题。再一次,我遇到了一些问题,因为人们可能会认为事情会像“Grails In Action”示例所示那样工作,但遗憾的是,我没有那么容易地解决。product.file是什么,是java.io.file还是Blob?如果它是一个blob,你需要先把它转换成字节数组。什么是product.file,它是java.io.file还是blob?如果它是一个blob,您需要首先将其转换为字节数组。文件是一个blob。我将blob存储在数据库中,现在我正在尝试将其取出并呈现到屏幕上。此外,我不确定如何创建链接:
id是HTML元素id,但通常用于在grails中存储域类数据库标识符。这是一个基本概念,我建议你在迷路之前先浏览一些教程,或者发布另一个问题。在grails语法中很容易迷失方向,因为在本例中,id与您所说的不同,对此我不清楚。我理解你的意思,但是,你的评论对我毫无帮助。一个链接或解释会更好地帮助我理解。没问题,迈克尔。我真的很感谢你的帮助。文件是一个污点。我将blob存储在数据库中,现在我正在尝试将其取出并呈现到屏幕上。此外,我不确定如何创建链接:
id是HTML元素id,但通常用于在grails中存储域类数据库标识符。这是一个基本概念,我建议你在迷路之前先浏览一些教程,或者发布另一个问题。在grails语法中很容易迷失方向,因为在本例中,id与您所说的不同,对此我不清楚。我理解你的意思,但是,你的评论对我毫无帮助。一个链接或解释会更好地帮助我理解。没问题,迈克尔。我非常感谢你的帮助。