简体   繁体   English

java 从数据库下载文件到 PC

[英]java download a file sourced from a database to PC

I am getting an image (jpeg or pdf) from a database and want to download it to the PC.我从数据库中获取图像(jpeg 或 pdf)并希望将其下载到 PC。 However, the image is not recognised at .file.exists() .但是,在.file.exists()无法识别图像。 This points to File file = new File(resourceDetail.getResourseImage());这指向File file = new File(resourceDetail.getResourseImage()); being incorrect.不正确。 What is the correct way to code this please?请问这个编码的正确方法是什么?

Note: resourceDetail.getResourseImage() is the actual image not a path.注意: resourceDetail.getResourseImage()是实际图像而不是路径。

My code is:我的代码是:

        resourceDetail = MySQLConnection.resourceDownload(fileID);

        FileInputStream stream = null;
        try {
            File file = new File(resourceDetail.getResourseImage());
            System.out.println("resourceDetail.getResourseImage(): " + resourceDetail.getResourseImage());

            if (!file.exists()) {
                System.out.println("File does not exist: ");
//              context.addMessage(new ErrorMessage("msg.file.notdownloaded"));
//              context.setForwardName("failure");
            } else {
                System.out.println("File exist: ");
                if (resourceDetail.getResourseImageType().equals("pdf")){
                    System.out.println("pdf: ");
                    response.setContentType("application/pdf");
                    response.setHeader("Content-Disposition", "attachment; filename='myfile.pdf'");
                }else{
                    System.out.println("jpeg: ");
                    response.setContentType("image/jpeg");
                    response.setHeader("Content-Disposition", "attachment; filename='myfile.jpg'");
                }
//              response.setHeader("Content-Disposition", "attachment; filename=" + file.getName());
                System.out.println("stream: ");
                stream = new FileInputStream(file);
                response.setContentLength(stream.available());
                OutputStream os = response.getOutputStream();      
                os.close();
                response.flushBuffer();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (stream != null) {
                try {
                    stream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

resourceDetail.getResourseImage() got string data, you can directly write the data to response by using: OuputStream#write(bytes) . resourceDetail.getResourseImage()得到字符串数据,你可以直接将数据写入响应,使用: OuputStream#write(bytes) In you case, just use ·os.write(resourceDetail.getResourseImage().getByets());` to do this.在您的情况下,只需使用 ·os.write(resourceDetail.getResourceImage().getByets());` 来执行此操作。

The Sample code:示例代码:

resourceDetail = MySQLConnection.resourceDownload(fileID);
try {
    System.out.println(
            "resourceDetail.getResourseImage(): " + resourceDetail.getResourseImage());

        if (resourceDetail.getResourseImageType().equals("pdf")) {
            System.out.println("pdf: ");
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "attachment; filename='myfile.pdf'");
        } else {
            System.out.println("jpeg: ");
            response.setContentType("image/jpeg");
            response.setHeader("Content-Disposition", "attachment; filename='myfile.jpg'");
        }
        response.setContentLength(resourceDetail.getResourseImage().length());
        OutputStream os = response.getOutputStream();
        os.write(resourceDetail.getResourseImage().getBytes());
        os.close();
        response.flushBuffer();
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (stream != null) {
        try {
            stream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

While this solution does not directly answer the issue with java it does give me a solution.虽然这个解决方案没有直接回答 java 的问题,但它确实给了我一个解决方案。 I started with using jQuery which worked with Chrome and not IE.我开始使用适用于 Chrome 而不是 IE 的 jQuery。 I was told it was not possible to active downloading images with jQuery and that I needed to do it via java.有人告诉我,无法使用 jQuery 主动下载图像,我需要通过 java 进行下载。 However, I have now found:但是,我现在发现:

http://danml.com/download.html http://danml.com/download.html

Kind regards,亲切的问候,

Glyn格林

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM