【问题标题】:Java webapp can't write image to folder created by webappJava webapp无法将图像写入webapp创建的文件夹
【发布时间】:2015-08-19 10:09:09
【问题描述】:

我有一个 Web 应用程序,我有几个操作。其中一个动作是脱离上下文将一些图像写入文件夹,让我们说:

/home/user/images/subfolder1/image.jpg

现在,另一个操作将该图像复制到位于图像内的另一个文件夹,但具有不同的扩展名,让我们说:

/home/user/images/subfolder2/subsubfolder2-1/image.png

现在,第一张图片是从表单中获取的,第二张图片是从保存第一张图片的路径中获取的,两张图片都是用相同的方法写入的:

InputStream in = new FileInputStream(origen);
OutputStream out = new FileOutputStream(destination.getAbsolutePath());

while ((len = in.read(buf)) > 0) {
   out.write(buf, 0, len);
}  

webapp 使用 mkdirs() 创建每个文件夹,包括“subfolder2/subsubfolder2-1/”(如果它们不存在)。

这在我运行 ubuntu 14.04 和 apache tomcat 6.0.43 的测试环境中工作得很好,但是,在生产中,是 centos 6(或 6.5),相同的 apache tomcat 版本,图像被创建,但没有数据被写入我的意思是,它创建了一个 image.png 文件,但它的大小为 0。所有文件夹都具有正确的权限,drwxrwxrwx,但由于某种原因, image.png 缺少它们,只有 rw。

这是什么原因造成的?

【问题讨论】:

  • 尝试将日志级别转为跟踪,如果您发现任何可疑情况。从您分享的信息来看,这似乎是一些本地环境设置问题 - 有点难以回答
  • 我在日志中唯一得到的是当我尝试读取文件时,我得到那个文件或目录不存在,我猜 isFile 验证大小,因为它是 0,所以它返回它不存在。但我会尝试更改日志级别。
  • 您确定正确关闭了输出流吗?
  • 是的,我正在正确关闭,但我已经修复了它。很奇怪。将添加答案。

标签: java tomcat ubuntu centos


【解决方案1】:

由于某些未知的原因,我只是将我的文件写入方式更改为:

        InputStream in = new FileInputStream(origen);
        OutputStream out = new FileOutputStream(destination.getAbsolutePath());

        int byteRead = 0;
           byte[] buffer = new byte[8192];
           while ((byteRead = in.read(buffer, 0, 8192)) != -1){
               out.write(buffer, 0, byteRead);
            }

而且运行正常,不知道是什么原因。

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 2017-04-18
    • 2012-06-28
    • 1970-01-01
    • 2020-07-07
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多