Video-download/stream über Java-servlet

Ich versuche, laden Sie eine video-Datei in meinem server, wenn der client-Zugriffs-URL ähnlich dieser:

http://localhost:8088/openmrs/moduleServlet/patientnarratives/videoDownloadServlet?videoObsId=61

Habe ich versucht diesen code. Aber es funktioniert nicht. Ich Besuche das servlet, das es nur den download einer Leeren (0-Größe) Datei.

protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
{
    try {
        Integer videoObsId = Integer.parseInt(request.getParameter("videoObsId"));

        Obs complexObs = Context.getObsService().getComplexObs(videoObsId, OpenmrsConstants.RAW_VIEW); 
        ComplexData complexData = complexObs.getComplexData();
        Object object2 = complexData.getData(); //<-- an API used in my service. this simply returns an object.

        byte[] videoObjectData = SerializationUtils.serialize(object2);

        //Get content type by filename.
        String contentType = null;
        if (contentType == null) {
            contentType = "application/octet-stream";
        }

        //Init servlet response.
        response.reset();
        response.setBufferSize(DEFAULT_BUFFER_SIZE);
        response.setContentType(contentType);
        response.setHeader("Content-Length", String.valueOf(videoObjectData.length));
        response.setHeader("Content-Disposition", "attachment; filename=\"" + "test.flv" + "\"");

        //Prepare streams.
        BufferedInputStream input = null;
        BufferedOutputStream output = null;

        try {
            //Open streams.
            input = new BufferedInputStream(new ByteArrayInputStream(videoObjectData), DEFAULT_BUFFER_SIZE);              
            output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);

            //Write file contents to response.
            byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
            int length;
            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }
        } finally {
            //Gently close streams.
            close(output);
            close(input);
        }
    }

    //Add error handling above and remove this try/catch
    catch (Exception e) {
        log.error("unable to get file", e);
    }
}
private static void close(Closeable resource) {
    if (resource != null) {
        try {
            resource.close();
        } catch (IOException e) {
            //Do your thing with the exception. Print it, log it or mail it.
            e.printStackTrace();
        }
    }
}

Habe ich verwendet BalusC ist fileservlet tutorial aber in meinem Fall habe ich nicht das file-Objekt als inputstream einfach das byte-array-Objekt.

helfen..

Und haben Sie überprüft den Wert von videoObjectData um zu sehen, was in es nach Sie Sie initialisieren?
ja, videoObjectData enthält die Daten initialisiert

InformationsquelleAutor harshadura | 2013-09-02

Schreibe einen Kommentar