Как просмотреть PDF, хранящийся в базе данных mysql при весенней загрузке - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть загрузочное приложение Spring, которое загружает файл PDF вместе с другими данными в базу данных mysql. Умею хранить файл. Ниже приведен мой код // Модель

public class DocumentModel {

    @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
      private String documentCategory; 
      @Lob
      private byte[] file;
      private String fileName;
      public DocumentModel() {}  
        public DocumentModel(String documentCategory, byte[] file, String fileName) {
            super();
            this.documentCategory = documentCategory;
            this.file = file;
            this.fileName = fileName;
        }
    //getters and settters

// Репозиторий

@Repository
public interface DocumentDao extends JpaRepository<DocumentModel, Long> {
    public DocumentModel  findByDocumentCategory(String documentCategory);

}

// Сервис

public interface DocumentService {
    public DocumentModel  getDocument(String documentCategory);

}

// Реализация сервиса

@Service
public class DocumentServiceImpl implements DocumentService {

    @Autowired private DocumentDao documentDao;

    @Override
    public DocumentModel getDocument(String documentCategory) {
        final DocumentModel retrievedDocument = documentDao.findByDocumentCategory(documentCategory);
        DocumentModel document = new DocumentModel(retrievedDocument.getDocumentCategory(),decompressBytes(retrievedDocument.getFile()),
                retrievedDocument.getFileName());
        return document;        
    }


    public static byte[] decompressBytes(byte[] file) {
        Inflater inflater = new Inflater();
        inflater.setInput(file);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream(file.length);
        byte[] buffer = new byte[1024];
        try {
            while (!inflater.finished()) {
                int count = inflater.inflate(buffer);
                outputStream.write(buffer, 0, count);
            }
            outputStream.close();
        } catch (IOException ioe) {
        } catch (DataFormatException e) {
        }
        return outputStream.toByteArray();
    }

}

// Контроллер

@RestController
@RequestMapping("/Document")
public class DocumentController {

    @Autowired private DocumentService documentService;



    @RequestMapping("/view")
    public @ResponseBody DocumentModel fetchDocument(@RequestParam("documentCategory") String documentCategory) {

        return documentService.getDocument(documentCategory);       
    }   

}

// html

<div id="documentPreview">
<iframe>{{documentInfo}}</iframe>
<button v-on:click="viewDocument">Preview</button>
</div>
<script type="text/javascript" >

    var documentApp=new Vue({
        el:"#documentPreview",
        data:function(){    
            return {
                documentInfo:''
            }

        },
        methods:{
            viewDocument:function() {   
                  axios.get(`/Document/view?documentCategory=degree`).then(function (response) {
                        this.documentInfo = response.data;
                  }.bind(this))

                      }         
            }
    });

</script>

Мне нужно, чтобы PDF отображался в контейнере предварительного просмотра при нажатии кнопки предварительного просмотра. Заранее благодарим вас за помощь.

...