Tôi cố gắng để tải về một tập tin video trong máy chủ của tôi khi URL truy cập của khách hàng tương tự như sau:video download/suối sử dụng Java servlet
http://localhost:8088/openmrs/moduleServlet/patientnarratives/videoDownloadServlet?videoObsId=61
Tôi đã thử mã này. Nhưng nó không hoạt động. Khi tôi truy cập vào servlet nó chỉ tải về một tập tin trống (0 kích thước).
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();
}
}
}
Tôi đã sử dụng BalusC của fileservlet tutorial nhưng trong trường hợp của tôi, tôi không có đối tượng tập tin như inputstream chỉ là đối tượng mảng byte.
trợ giúp ..
Và bạn đã kiểm tra giá trị của 'videoObjectData' để xem nội dung trong đó sau khi bạn khởi tạo? – chrylis
có, 'videoObjectData' chứa dữ liệu được khởi tạo – harshadura