在grails中加密xls文件并下载
encrypt xls file in grails and download
我需要下载带密码或加密的 xls 文件。
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import com.emmanuelrosa.frostedsheets.*
def downloadxls(){
/*
* Creates a workbook with Apache POI and decorates it
* with Frosted Sheets.
*/
response.setContentType('application/vnd.ms-excel')
response.setHeader('Content-Disposition', 'Attachment;Filename="data.xls"')
// response.setContentType("APPLICATION/OCTET-STREAM")
// response.setHeader('Content-Disposition', 'Attachment;Filename="archivo.buf"')
def outputStream = response.getOutputStream()
def workbook = new FrostedWorkbook(new HSSFWorkbook())
workbook['Students'].with {
append(['First Name', 'Last Name', 'Age'])
append(['John', 'Doe', '20'])
append(['Jane', 'Smith', '18'])
}
workbook['Courses'].with {
append(['Course Name', 'Number of Units'])
append(['Algebra', 3])
append(['English Grammar', 5])
}
/*
* workbook is an instance of FrostedWorkbook,
* which implements the Workbook interface.
* The writeProtectWorkbook() method is provided
* by HSSFWorkbook (it's not in the interface).
* FrostedWorkbook.workbook is the decorated HSSFWorkbook
*/
workbook.workbook.writeProtectWorkbook('password', 'user')
workbook.write(response.outputStream)
outputStream << workbook
outputStream.flush()
文件下载code.with这段代码我可以下载.xls文件,但即使你添加所有数据仍然没有加密。
outputStream.close()
}
问题是您下载的文件没有加密。
您正在尝试使用两个库来创建您的 Excel 工作簿:JXL 和 Apache POI。他们对彼此一无所知。所以 JXL 忽略了密码。
Excel 工作簿密码保护
加密和密码保护是有区别的。两者都使用密码,但 密码保护 不 加密文件。该文件仍然可以读取,但不能修改。
这是一个显示如何 password-protect 工作簿的示例。我正在使用我的库 Frosted Sheets,它是 Apache POI 的便捷包装器。
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import com.emmanuelrosa.frostedsheets.*
/*
* Creates a workbook with Apache POI and decorates it
* with Frosted Sheets.
*/
def workbook = new FrostedWorkbook(new HSSFWorkbook())
workbook['Students'] << [
['First Name', 'Last Name', 'Age'],
['John', 'Doe', '20'],
['Jane', 'Smith', '18']
]
workbook['Courses'] << [
['Course Name', 'Number of Units'],
['Algebra', 3],
['English Grammar', 5]
]
/*
* workbook is an instance of FrostedWorkbook,
* which implements the Workbook interface.
* The writeProtectWorkbook() method is provided
* by HSSFWorkbook (it's not in the interface).
* FrostedWorkbook.workbook is the decorated HSSFWorkbook
*/
workbook.workbook.writeProtectWorkbook('password', 'user')
workbook.write(response.outputStream)
Excel 工作簿加密
FrostedSheets 现在为 XLSX 工作簿提供加密。您只需要使用 0.3.0 或更高版本:
import com.emmanuelrosa.frostedsheets.*
/*
* Creates an XLSX workbook with Apache POI and decorates it
* with Frosted Sheets.
*/
def workbook = FrostedWorkbook.createXLSX()
workbook['Students'] << [
['First Name', 'Last Name', 'Age'],
['John', 'Doe', '20'],
['Jane', 'Smith', '18'],
]
workbook['Courses'] << [
['Course Name', 'Number of Units'],
['Algebra', 3],
['English Grammar', 5]
]
workbook.writeEncrypted(outputStream: response.outputStream, password: 'password')
警告:在加密过程中,工作簿以未加密的方式写出到临时存储。默认为字节数组 (RAM),但也可以使用临时文件。
此外,请确保将响应 header 中的文件扩展名更改为 xlsx。
我需要下载带密码或加密的 xls 文件。
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import com.emmanuelrosa.frostedsheets.*
def downloadxls(){
/*
* Creates a workbook with Apache POI and decorates it
* with Frosted Sheets.
*/
response.setContentType('application/vnd.ms-excel')
response.setHeader('Content-Disposition', 'Attachment;Filename="data.xls"')
// response.setContentType("APPLICATION/OCTET-STREAM")
// response.setHeader('Content-Disposition', 'Attachment;Filename="archivo.buf"')
def outputStream = response.getOutputStream()
def workbook = new FrostedWorkbook(new HSSFWorkbook())
workbook['Students'].with {
append(['First Name', 'Last Name', 'Age'])
append(['John', 'Doe', '20'])
append(['Jane', 'Smith', '18'])
}
workbook['Courses'].with {
append(['Course Name', 'Number of Units'])
append(['Algebra', 3])
append(['English Grammar', 5])
}
/*
* workbook is an instance of FrostedWorkbook,
* which implements the Workbook interface.
* The writeProtectWorkbook() method is provided
* by HSSFWorkbook (it's not in the interface).
* FrostedWorkbook.workbook is the decorated HSSFWorkbook
*/
workbook.workbook.writeProtectWorkbook('password', 'user')
workbook.write(response.outputStream)
outputStream << workbook
outputStream.flush()
文件下载code.with这段代码我可以下载.xls文件,但即使你添加所有数据仍然没有加密。
outputStream.close()
}
问题是您下载的文件没有加密。
您正在尝试使用两个库来创建您的 Excel 工作簿:JXL 和 Apache POI。他们对彼此一无所知。所以 JXL 忽略了密码。
Excel 工作簿密码保护
加密和密码保护是有区别的。两者都使用密码,但 密码保护 不 加密文件。该文件仍然可以读取,但不能修改。
这是一个显示如何 password-protect 工作簿的示例。我正在使用我的库 Frosted Sheets,它是 Apache POI 的便捷包装器。
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import com.emmanuelrosa.frostedsheets.*
/*
* Creates a workbook with Apache POI and decorates it
* with Frosted Sheets.
*/
def workbook = new FrostedWorkbook(new HSSFWorkbook())
workbook['Students'] << [
['First Name', 'Last Name', 'Age'],
['John', 'Doe', '20'],
['Jane', 'Smith', '18']
]
workbook['Courses'] << [
['Course Name', 'Number of Units'],
['Algebra', 3],
['English Grammar', 5]
]
/*
* workbook is an instance of FrostedWorkbook,
* which implements the Workbook interface.
* The writeProtectWorkbook() method is provided
* by HSSFWorkbook (it's not in the interface).
* FrostedWorkbook.workbook is the decorated HSSFWorkbook
*/
workbook.workbook.writeProtectWorkbook('password', 'user')
workbook.write(response.outputStream)
Excel 工作簿加密
FrostedSheets 现在为 XLSX 工作簿提供加密。您只需要使用 0.3.0 或更高版本:
import com.emmanuelrosa.frostedsheets.*
/*
* Creates an XLSX workbook with Apache POI and decorates it
* with Frosted Sheets.
*/
def workbook = FrostedWorkbook.createXLSX()
workbook['Students'] << [
['First Name', 'Last Name', 'Age'],
['John', 'Doe', '20'],
['Jane', 'Smith', '18'],
]
workbook['Courses'] << [
['Course Name', 'Number of Units'],
['Algebra', 3],
['English Grammar', 5]
]
workbook.writeEncrypted(outputStream: response.outputStream, password: 'password')
警告:在加密过程中,工作簿以未加密的方式写出到临时存储。默认为字节数组 (RAM),但也可以使用临时文件。
此外,请确保将响应 header 中的文件扩展名更改为 xlsx。