首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加密grails中的xls文件并下载

加密grails中的xls文件并下载
EN

Stack Overflow用户
提问于 2016-02-25 01:22:03
回答 1查看 513关注 0票数 1

我需要一个密码或加密下载xls文件。

代码语言:javascript
运行
复制
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文件,但即使添加了所有数据,仍然没有加密。

代码语言:javascript
运行
复制
    outputStream.close()

}

问题是您下载的文件没有加密。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-25 02:31:47

您正在尝试使用两个库来创建Excel工作簿: JXL和Apache。他们对彼此一无所知。所以JXL忽略了密码。

Excel工作簿密码保护

加密和密码保护是有区别的。这两种方法都使用密码,但是密码保护不会使对文件进行加密。文件仍然可以读取,但不能修改。

下面是一个演示如何保护工作簿的示例。我正在使用我的库霜片,它是Apache的方便包装器。

代码语言:javascript
运行
复制
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或更高版本:

代码语言:javascript
运行
复制
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),但也可以使用临时文件。

另外,确保将响应头中的文件扩展名更改为xlsx。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35616511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档