我已经完成了使用spring MultipartFile将文件上传到目标文件夹的操作。现在,我想单击查看按钮以pdf格式查看相同的文件。

这是我的jsp。

<form method="POST" action="fileSearch">

        <table id="abc1" cellpadding="9" bgcolor="74BAAC" width="50%"
            style="margin-top: 8px; margin-left: 320px;" cellspacing="9">
            <tr>

                <td>Name:</td>
                <td><input type="text" name="name"></td>
                <td>Category:</td>
                <td><select name="seldCategory" id="selectFileCategory">
                        <option value="selectFileCategory">selectFileCategory</option>
                        <option value="FileCategory1">FileCategory1</option>
                        <option value="FileCategory2">FileCategory2</option>
                        <option value="FileCategory3">FileCategory3</option>
                        <option value="FileCategory4">FileCategory4</option>
                </select></td>
                <td><input type="submit" value="search"></td>
            </tr>


        </table>
        <c:if test='${not empty "${fileSearchList}"}'>

            <table align="center" class="viewAllTripTable" border="1"
                style="display: center">
                <c:if test='${not empty "${fileSearchList}"}'>
                    <tr>
                        <td colspan="1"><b>Name:</b></td>
                        <td colspan="1"><b>Category:</b></td>
                        <td colspan="1"><b>View File</b></td>
                    </tr>
                </c:if>
                <c:forEach items="${fileSearchList}" var="fsList">
                    <tr>
                        <td><c:out value="${fsList.name}" /></td>
                        <td><c:out value="${fsList.category}" /></td>
                        <td><c:out value="${fsList.file_path}" /></td>

                        <td><a class="buy" href="view?file_path=${fsList.file_path}&file_name=${fsList.name}">view</a></td>
                    </tr>
                </c:forEach>

            </table>

        </c:if>
    </form>

我在这里传递两个参数文件Path和File Name,我认为下面的方法有很多更正。建议我以正确的方式进行操作。 我正在尝试在浏览器选项卡中查看特定文件。

            @RequestMapping(value = { "/view" }, method = RequestMethod.GET)
            public String viewFile(@RequestParam("file_path") String file_path,
                    @RequestParam("file_name") String fileName,
                    HttpServletResponse response, HttpServletRequest request)
                    throws IOException, DocumentException {

                String filePath = file_path.replace("/", "\\");
                System.out.println(filePath);
                FileInputStream is = null;
                BufferedReader bfReader = null;
                try {
                    File file = new File(filePath);
                    FileInputStream inputStream = new FileInputStream(file);
                    byte[] bytes = new byte[(int) file.length()];
                    inputStream.read(bytes);

                    FileOutputStream out = new FileOutputStream(file);
                    out.write(bytes);

                    Document d = new Document();
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    PdfWriter.getInstance(d, baos);
                    d.open();
                    d.add(new Paragraph("Hello World, iText"));
                    d.close();
                    response.setContentType("application/pdf");
                    response.setHeader("Content-disposition", "attachment; filename="
                            + fileName + ".pdf");
                    response.setHeader("Cache-Control",
                            "must-revalidate, post-check=0, pre-check=0");
                    response.setHeader("Expires", "0");
                    response.setHeader("Pragma", "No-cache");
                    response.setContentLength(baos.size());
                    ServletOutputStream outn = response.getOutputStream();
                    baos.writeTo(outn);
                    out.close();

                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("sasa" + filePath);
                return "searchPage";
            }

#1楼 票数:0

您可以尝试使用以下方式之一。

使用AbstractITextPdfView生成PDF并返回它。 需要一些配置。 您可以即兴显示此链接上显示的示例

或者,您可以尝试以下操作:

更改方法签名以返回ResponseEntity<byte[]>并进行以下其他更改:

    @RequestMapping(value = { "/view" }, method = RequestMethod.GET)
    public ResponseEntity<byte[]> viewFile(@RequestParam("file_path") String file_path,
                @RequestParam("file_name") String fileName,
                HttpServletResponse response, HttpServletRequest request)
                throws IOException, DocumentException {

        byte[] fileContents = // retrieve the file contents

        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.parseMediaType("application/pdf"));
        String fileName= "yourReqdFileName.pdf";
        httpHeaders.setContentDispositionFormData(fileName, fileName);
        httpHeaders.setCacheControl("must-revalidate, post-check=0, pre-check=0");
        ResponseEntity<byte[]> serverResponse = new ResponseEntity<byte[]>(contents, headers, HttpStatus.OK);
        return serverResponse;
    } 

  ask by user2099038 translate from so

未解决问题?本站智能推荐:

4回复

spring-mvc(portlet):如何在打开文件对话框中返回pdf文件?

在我的@ActionMapping我为用户创建了一个PDF文件。 现在我想知道如何以保存/打开文件对话框的形式将这个pdf返回给用户? 如果这一代人成功的话,我更喜欢这个显示下载链接。 我将spring-mvc 3.0.5与portlet结合使用。 但是,如果有人有一些正常应用程序的
1回复

文件上传时,带有Spring Security的Spring 4.0 MVC中缺少多部分请求的内容

我正在使用Spring Security4。多部分文件上传时出现错误。 在应用程序配置中,我有。 在网络服务器配置中 在AbstractSecurityWebApplicationInitializer中 正如我在此处的堆栈溢出中发现的,我删除了Commons F
1回复

为什么在Spring-MVC中无法加载资源文件

我在mvc:resource标签下面添加了servlet.xml,但我的应用程序未获取任何资源文件。 我正在尝试开发基于xml的spring mvc应用程序。 为什么资源文件没有加载?
1回复

使用Spring-MVC在浏览器中打开文件

我正在从数据库中读取文件,并尝试在浏览器中打开文件。 我的代码如下... 当我这样做时,文件会自动下载 但是当我这样做的时候,文件正在浏览器中打开。 它是由于模仿类型“ application / pdf”而发生的。 但是在我的应用程序中,我不知道文件的mimetype
1回复

使用Spring-Boot和Spring-MVC从文件系统中的任何位置提供文件

我正在尝试制作一个Web应用程序,您可以在其中上传图像,该图像保存在我的文件系统中,然后通过某个地址(如imgur)提供给用户。 在将图像上传并保存到我的系统后,我一直无法提供图像。 已经向我指出,问题可能是当我应该将图像存储在项目目标文件夹中时,将它们存储为源树的一部分。 现在,首先
1回复

Spring用文件名中的点(s)提供静态内容

我想通过Spring提供npm中构建的网页,一切都运行正常,但无论真正的后缀是什么(css,js或html),我都无法提供像main.xxxx.yyy这样的资源。 目录树是这样的: 这是应用程序类: 为了调试这个问题,我手动重命名了一些文件并且它可以工作,因此我将问题限制在
1回复

使用Spring注释读取属性文件中的选定内容

我在类路径“ test.properties”中有下面的属性文件 我想根据国家代码(即前两个字符)读取以上属性文件。 示例如果国家/地区代码为IN,则我必须获取以下详细信息IN = MAA,钦奈,印度,钦奈国际机场。 请帮助我如何使用spring注解@propertysource
2回复

Spring中的文件存储

我想将从表单上传的文件保存到Spring 3应用程序中的某个文件夹中。 我是这个菜鸟,不知道怎么开始。 文件必须是java文件格式。