开发者社区 > 云存储 > 对象存储OSS > 正文

想问一下,从阿里OSS流式下载的PDF文件,无法被pdfbox读取。想问下这种应该怎么解决呢?

GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
// 获取OSSObject实例
OssObject ossObject = client.getObject(getObjectRequest);
// 获取输入流
InputStream inputStream = ossObject.getObjectContent();
// 使用输入流进行后续操作,比如读取PDF文件等
PDDocument load = PDDocument.load(inputStream);
最后一行报错,显示Error: End-of-File, expected line

展开
收起
游客mgdselnrymoo6 2023-09-14 15:44:40 881 0
5 条回答
写回答
取消 提交回答
  • "End-of-File, expected line" 错误通常表示 PDF 文件格式不正确或被截断了,导致 PDFBox 无法正确解析文件。这可能是由于多种原因引起的,包括网络传输问题、OSS 服务问题或 PDF 文件本身的问题。

    最重要的是排除文件和网络传输问题。如果确定问题不是由于这些因素引起的,那么可以考虑尝试不同的 PDF 处理库

    2023-09-17 17:10:14
    赞同 1 展开评论 打赏
  • 根据您提供的代码和错误信息,问题可能出在输入流的读取上。当使用流式下载从阿里OSS获取PDF文件时,确保正确处理输入流的读取。

    以下是一种可能的解决方案:

    GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
    // 获取OSSObject实例
    OssObject ossObject = client.getObject(getObjectRequest);
    // 获取输入流
    InputStream inputStream = ossObject.getObjectContent();

    try {
    // 将输入流保存为临时文件
    File tempFile = File.createTempFile("temp", ".pdf");
    FileOutputStream outputStream = new FileOutputStream(tempFile);
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, bytesRead);
    }
    outputStream.close();

    // 使用PDFBox读取临时文件
    PDDocument load = PDDocument.load(tempFile);
    // 后续操作...
    

    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    // 关闭输入流
    inputStream.close();
    }

    上述代码将输入流保存为临时文件,然后使用PDFBox读取该临时文件。这样可以避免直接在输入流上进行操作时出现的错误。

    2023-09-16 08:48:06
    赞同 展开评论 打赏
  • 这个错误通常表示PDDocument.load()方法在读取PDF文件时遇到了文件结尾(End-of-File)异常。这可能是由于流式下载的PDF文件未完整传输导致的。

    为了解决这个问题,您可以尝试以下方法:

    1. 确保PDF文件完整:首先,请确保从阿里OSS下载的PDF文件在传输过程中没有损坏或截断。您可以尝试重新下载文件,或者使用其他方式验证文件的完整性。

    2. 使用本地文件进行测试:将下载的PDF文件保存到本地磁盘,并使用本地文件路径加载PDF文档进行测试。这样可以排除流式下载和网络传输引起的问题,并确认PDF文件本身是否能够被正确读取。

    3. 检查PDF文件格式:确保您下载的文件是有效的PDF格式。有时候,文件扩展名可能是".pdf"但内容实际上并不是合法的PDF文件。您可以尝试打开该文件并验证其内容是否符合PDF规范。

    4. 更新PDFBox库:确保您使用的是最新版本的PDFBox库。有时候,旧版本的库可能存在一些已知的问题,而更新到最新版本可能会修复这些问题。

    2023-09-14 22:47:05
    赞同 展开评论 打赏
  • 这个错误通常表示您尝试使用pdfbox读取的PDF文件存在问题,可能是由于文件损坏或者格式不正确导致的。
    为了解决这个问题,您可以尝试以下步骤:

    1. 确认您的PDF文件是否存在问题。您可以尝试使用其他工具或者软件打开该文件,看看是否能够正常打开。
    2. 确认您的OSS对象是否存在问题。您可以尝试使用其他工具或者软件从OSS下载该文件,看看是否能够正常下载。
    3. 如果您的PDF文件和OSS对象都没有问题,您可以尝试使用其他PDF解析库或者工具来读取该文件。例如,您可以尝试使用Apache PDFBox的其他方法来读取PDF文件,或者使用其他PDF解析库来读取PDF文件。
    4. 如果您的问题仍然无法解决,您可以尝试重新下载该文件,或者联系阿里云客服寻求帮助。
    2023-09-14 18:23:12
    赞同 展开评论 打赏
  • 已经解决了,我之前使用的是旧版本,3.9.0。升级版本为3.17.0之后问题解决。

    2023-09-14 16:03:38
    赞同 展开评论 打赏

对象存储 OSS 是一款安全、稳定、高性价比、高性能的云存储服务,可以帮助各行业的客户在互联网应用、大数据分析、机器学习、数据归档等各种使用场景存储任意数量的数据,以及进行任意位置的访问,同时通过丰富的数据处理能力更便捷地使用数据。

相关产品

  • 对象存储
  • 热门讨论

    热门文章

    相关电子书

    更多
    对象存储实战指南-试读 立即下载
    OpenAnolis 龙蜥操作系统开源社区技术创新白皮书 立即下载
    使用CNFS搭建弹性Web服务 立即下载