我正在用lua编写一个简单的CGI程序。我想要实现的是从CGI产生一个响应,它允许从浏览器下载文件。但我只是无法打印数据。我不知道这里发生了什么。以下是代码:
print("Content-Type: text/html; charset=UTF-8")
print("Content-Length:" .. sys.getenv("CONTENT_LENGTH"))
print("Content-Disposition:",'attachment;filename="backup.tar.gz"\n')
print("Content-Type:application/x-tar-gz\n\n")
file=io.popen("some command")
output = file:read('*a')
print(output)
--file:close()
问题是我无法打印内容为二进制的输出。我可以看到输出的类型是字符串。
有什么问题?请给出一些提示。谢谢。
ADD :我对此一无所知,问题在哪里。让我提供有关我想要运行的命令的更多信息。但我认为这不重要。
答案 0 :(得分:1)
print("Content-Disposition:",'attachment;filename="backup.tar.gz"\n')
print("Content-Type:application/x-tar-gz\n\n")
我认为你有太多的新行。首先,您可以在Content-Disposition
中添加换行符,这是print
添加的换行符的补充,它会结束标题并使Content-Type
成为有效负载的一部分(这会破坏内容)。您在Content-Type
中还有两个换行符,您只需要一个换行符(由print
命令添加一个换行符。)
我认为这样的事情应该有效:
local file = io.popen("some command")
local output = file:read('*a')
file:close()
print("Content-Type: text/html; charset=UTF-8")
print("Content-Length: " .. #output)
print("Content-Disposition: " .. 'attachment;filename="backup.tar.gz"')
print("Content-Type: application/x-tar-gz\r\n")
print(output)