我有一个网站,当用户上传 PDF 文件时,它会被发送到服务器,进行一些 PDF 渲染,并创建一个 .png 文件以显示为 PDF 预览缩略图。
问题是在创建 .png 时,写入磁盘的速度比整个执行速度慢,这会导致图像在站点上显示为错误,因为它试图访问不存在的图像(因为代码已完成在写入磁盘完成之前)。
我Thread.sleep(2000)
在创建 .png 之后添加了一个,它似乎解决了这个问题。现在我的问题是,我的情况Thread.sleep(2000)
是最好使用的代码吗?我不知道该代码是否会影响访问我的网站和上传文件的多个用户。
假设 UserA 在 UserB 正常浏览时上传文件。UserA 上传文件后,UserB 是否会遇到 2 秒延迟?
有没有更好的方法让我在这种情况下暂停代码执行?
编辑:添加代码。我使用 PDF-Renderer 作为我的库:https ://java.net/projects/pdf-renderer
public static void convertPDFtoImage () throws IOException {
RandomAccessFile raf = new RandomAccessFile (new File (rep.pathSamplePDF), "r");
FileChannel fc = raf.getChannel ();
ByteBuffer buf = fc.map (FileChannel.MapMode.READ_ONLY, 0, fc.size ());
PDFFile pdfFile = new PDFFile (buf);
PDFPage firstPage = pdfFile.getPage(1);
Rectangle2D r2d = firstPage.getBBox ();
int width = (int) r2d.getWidth ();
int height = (int) r2d.getHeight ();
Image pdfImage = firstPage.getImage(width, height, r2d, null, true, true);
BufferedImage imageToSave = (BufferedImage) pdfImage;
File outputFile = new File("public/pdfpreview/" + someName + ".png");
ImageIO.write(imageToSave, "png", outputFile); //Trying to delay this part so that it can finish writing to disk
Thread.sleep(2000) //If I put this code here, it fixes my problem.
}