商业模式有点复杂,如果解释不是100%清楚,请原谅我:
Uploader接口(String upload(String path, byte[] fileContents)
)定义了上传文件(包含在字节数组中)的不同方式,例如AmazonUploader
,其中包含内容和path
字符串,以及上传它在给定密钥下的Amazon S3。
我有一个名为LocalUploader
的类,它在QA中使用,将给定的文件数组按原样写入本地磁盘。
Uploader用于两种不同的情况:
web
ssh
登录root
的用户运行的命令行界面。命令行界面与Web界面不同,但它们都捆绑了Uploader。此外,命令行可执行文件是最后运行java -jar ....
的bash脚本。
我们的想法是将文件保存到已知位置,然后通过简单的静态http服务器提供服务。
问题简短:由于两个进程都写入同一个位置,当命令行界面写入文件时,Web界面不再可写(web
无法访问由root
制作的文件,显然,没有相反的问题。)
现在,我坚持使用Java 6作为上传器,所以没有nio
文件包。
java.io.File
的{{1}}。如果我在写入文件之前执行此操作,则会失败(返回.setWritable()
),如果我之后执行此操作,则返回true但不设置false
标志。writable
以另一个用户身份运行jar。但这与参数插入混淆su
,Java被及时忽略。可能是因为它是一个不同的过程。umask
@Override
public String upload(String path, byte[] fileContents) {
final File file = new File(path);
try {
FileUtils.writeByteArrayToFile(file, fileContents);
} catch (IOException e) {
throw new RuntimeException("Error writing file to path " + path, e);
}
return "";
}
整个事情闻起来像一些微不足道的问题,首先不应该存在,但我很难过。希望得到任何帮助。