下载时仅创建仅读取文件



我的要求是仅使用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虚拟机,使其可以修改标记仅读取的文件。是否可以删除仅读取文件或目录取决于基础系统。

相关内容

  • 没有找到相关文章

最新更新