cari

Rumah  >  Soal Jawab  >  teks badan

java - 如何实现springmvc将返回的给前端的pdf文件放在浏览器里预览?

想在浏览器里直接GET目标URL,然后就把PDF在浏览器里预览出来(不用前端插件的前提下),就像这样:

http://docs.spring.io/spring/...

后端代码:

@RequestMapping(value = "/showPDF", method = RequestMethod.GET)
public ResponseEntity<byte[]> pdfDownload(
        HttpServletRequest httpServletRequest
) throws IOException
{
    String path = XXX省略。。。
    File file = new File(path);
    HttpHeaders httpHeaders = new HttpHeaders();
    String fileName = file.getName();
    httpHeaders.setContentDispositionFormData("attachment",            java.net.URLEncoder.encode(fileName,"UTF-8"));
    httpHeaders.setContentType(MediaType.parseMediaType("application/pdf"));
    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
            httpHeaders,
            HttpStatus.CREATED);
}

然后想在前端直接GET这个URL地址:

http://localhost:8080/FileUpDown/showPDF

但是却成了下载文件而不是预览了。。。

这是chrome的输出:

**Response Headers**
*view source
Content-Disposition:form-data; name="attachment"; filename="1472111731322JavaScript%E6%9D%83%E5%A8%81%E6%8C%87%E5%8D%97.pdf"
Content-Length:21962427
Content-Type:application/octet-stream;charset=UTF-8
Date:Thu, 25 Aug 2016 08:32:56 GMT
Server:Apache-Coyote/1.1*

Conrent-Type明显不对,请问该如何解决?

迷茫迷茫2885 hari yang lalu1031

membalas semua(5)saya akan balas

  • PHP中文网

    PHP中文网2017-04-18 09:54:15

    Terima kasih atas jawapan anda, ini penyelesaian saya.
    1 Cipta folder muat naikFail di bawah laluan web.

    2. Memetakan fail PDF dalam springMVC adalah seperti memetakan fail statik.

     <mvc:resources mapping="/pdf/**" location="/uploadFiles/"/>
    

    3 Tulis pengawal untuk mengembalikan laluan URL PDF.

    @Controller
    @CrossOrigin(origins = "*")
    public class PDFController {
        
        @ResponseBody
        @RequestMapping(value = "/pdf", method = RequestMethod.GET)
        public String pdfDownload() throws IOException
        {
            String retString = null;
            String dir = XXXX文件在服务器中路径。
            String path = httpServletRequest.getRequestURL() + dir.substring(dir.lastIndexOf('\'));
            retString = path.replaceAll("\\","/");
            Map<String,Object >map = new HashMap<>();
            map.put("code",0);
            map.put("pdf",retString);
            return JSON.toJSONString(map);
        }
    }
    

    4, data JSON yang dikembalikan.

    {"code":0,"pdf":"http://127.0.0.1:8080/pdf/1472128890165sample.pdf"}
    

    5 Buka URL pdf terus dalam penyemak imbas untuk melihat PDF.

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 09:54:15

    Terus letakkan fail pdf dalam direktori statik pada pelayan, ubah hala alamat ke laluan fail, dan penyemak imbas secara automatik akan membuka pratonton anda boleh cuba terus memasukkan laluan penuh fail pdf seterusnya pada cakera tempatan dengan merujuk kepada penyemak imbas , penyemak imbas juga secara automatik membuka pratonton

    balas
    0
  • 高洛峰

    高洛峰2017-04-18 09:54:15

    Sama seperti mengakses fail statik, bagaimana anda meletakkan fail js anda dan bagaimana anda meletakkan pdf anda.

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:54:15

    Pergi ke bahagian respons. Terdapat sesuatu di hadapan respons, yang sepatutnya membawa kepada pratonton

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:54:15

    Cuba tukar baris RequestMapping kepada:

    @RequestMapping(value = "/showPDF", method = RequestMethod.GET, produces = MediaType.APPLICATION_PDF_VALUE)

    balas
    0
  • Batalbalas