在我的Grails应用程序中,我有一个控制器函数来返回PDF文件。
当我调用URL(返回文件)时,它会下载文件,而不是在浏览器中显示PDF文件。
当我从其他网站打开其他pdf文件时,它会显示在浏览器中..所以我认为它与我的返回响应有关?
def separator = grailsApplication.config.project.separator.flag
def path = grailsApplication.config.project.images.path+"public/"+user.id+"/"
render(contentType: "multipart/form-data", file: new File(path+note.preview), fileName: note.preview)
我是否需要更改contentType? (我有点试过/ application / pdf但是没有用?还是下载。
答案 0 :(得分:4)
尝试将content-disposition
设置为内联。 Content-Type
告诉浏览器它是什么类型的内容,但处置告诉浏览器如何处理它。
更多信息in this answer
答案 1 :(得分:1)
通过返回"文件"有些东西变得腐败了。对象而不是byte []对象。
所以我添加了以下几行。
byte[] DocContent = null;
DocContent = getFileBytes(path+note.preview);
response.setHeader "Content-disposition", "inline; filename="+note.preview+""
response.contentType = 'application/pdf'
response.outputStream << DocContent
response.outputStream.flush()
public static byte[] getFileBytes(String fileName) throws IOException
{
ByteArrayOutputStream ous = null;
InputStream ios = null;
try
{
byte[] buffer = new byte[4096];
ous = new ByteArrayOutputStream();
ios = new FileInputStream(new File(fileName));
int read = 0;
while ((read = ios.read(buffer)) != -1)
ous.write(buffer, 0, read);
}
finally
{
try
{
if (ous != null)
ous.close();
}
catch (IOException e)
{
// swallow, since not that important
}
try
{
if (ios != null)
ios.close();
}
catch (IOException e)
{
// swallow, since not that important
}
}
return ous.toByteArray();
}