下载时创建只读文件

时间:2017-09-11 07:03:50

标签: java spring-mvc multipart

我的要求是使用spring mvc以只读格式上传文件,并以只读方式下载相同的文件。 我能够以只读格式上传文件,但在下载后它丢失了只读属性。

文件上传代码: -

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;
        }
    }
}

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您必须使用以下内容设置自己的只读属性:

const styles={
    containerStyle: {
        borderWidth: 1,
        borderRadius: 2,
        borderColor: '#ddd',
        borderBottomWidth: 0,
        shadowColor: '#000',
        shadowOffset: { width: 0, height: 2 },
        shadowOpacity: 0.1,
        shadowRadius: 2,
        elevation: 1,
        marginLeft: 5,
        marginRight: 5,
        marginTop: 10
    }
};

来自documentation of the setReadOnly method

  

public boolean setReadOnly()

     

标记此抽象路径名指定的文件或目录,以便只允许读取操作。调用此方法后,文件或目录将不会更改,直到删除或标记为允许写访问。在某些平台上,可以使用特殊权限启动Java虚拟机,以允许它修改标记为只读的文件。是否可以删除只读文件或目录取决于底层系统。

答案 1 :(得分:0)

不幸的是,这是不可能的。

如果文件位于您无法控制的用户计算机上,则无法对该文件强制执行任何操作。

您可以使用密钥对其进行签名以检测篡改,他们仍然可以对其进行编辑,但您会知道他们已经完成了。

您甚至无法设置只读标志,因为此question确认,因为没有只读标头,即使您创建了一个尊重此标头的下载程序,并在文件上设置了标志用户只需从文件中删除只读标志即可进行编辑。