我的要求是仅使用Spring MVC上传仅读取格式,然后仅在Read中下载相同的文件。我只能以读取格式上传文件,但是下载后,它丢失了只读属性。
上传文件的代码: -
File destinationFile = new File ( targetPath);
try {
FileOutputStream out = new FileOutputStream( destinationFile );
byte[] bytes = file.getBytes();
stream = new BufferedOutputStream(out);
stream.write(bytes);
destinationFile.setReadOnly();
destinationFile.setWritable(false);
}finally {
if(stream != null){
stream.close();
}
}
代码下载: -
File file = new File(folderPath);
contentType = "application/octet-stream";
response.setBufferSize(BUFFER_SIZE);
response.setHeader("Content-Disposition", disposition + ";filename="" + filename + """);
RandomAccessFile input = new RandomAccessFile(file, "r");
OutputStream output = response.getOutputStream();
long start, long length;
byte[] buffer = new byte[BUFFER_SIZE];
int read;
if (input.length() == length) {
while ((read = input.read(buffer)) > 0) {
output.write(buffer, 0, read);
}
} else {
input.seek(start);
long toRead = length;
while ((read = input.read(buffer)) > 0) {
if ((toRead -= read) > 0) {
output.write(buffer, 0, read);
} else {
output.write(buffer, 0, (int) toRead + read);
break;
}
}
}
有什么建议吗?
不幸的是这是不可能的。
一旦文件位于用户的计算机上,您无法控制文件。
您可以使用钥匙来检测篡改,他们仍然可以编辑它,但是您会知道他们已经完成了。
您甚至不能设置一个仅读取标志,因为这个问题仅仅没有读取标头,即使您制作了尊重此标头的下载器,并在文件上设置标志,用户可以删除用户仅从文件中读取标志并能够对其进行编辑。
您必须将自己设置为仅读取属性:
file.setReadOnly();
从setReadonly方法的文档中:
public boolean setReadonly()
标记此抽象路径名称命名的文件或目录,因此仅允许读取操作。调用此方法后,文件或目录在删除或标记以允许写入访问之前不会更改。在某些平台上,有可能启动具有特殊特权的Java虚拟机,使其可以修改标记仅读取的文件。是否可以删除仅读取文件或目录取决于基础系统。