是否可以使用 axios 请求从 Rails 端点获取 zip 文件?
Can an axios request be used to get a zip file from a Rails endpoint?
我正在尝试向 Rails 控制器方法发出请求,该方法以压缩文件作为响应。如何发出前端 Axios 请求?
控制器方法:
include ActionController::Streaming
include Zipline
def index
respond_to do |format|
format.zip do
zipline([[@project.attached.url, "#{@project_name.parameterize}.pdf"]], "documents.zip")
end
end
end
如果我使用视图我会做什么:
= link_to "Download projects", company_projects_path(@company, format: :zip)
等效的 axios 请求是什么样的?这不起作用:
const handleClick = () => {
axios
.get(`/projects/${project.id}`, {
headers: { 'Accept': 'application/zip' }
})
.catch(e => console.log(e))
};
所以我发现这对我有用:
<a href={`/projects/${project.id}.zip`} download>Download all</a>
与其使用带有 onClick axios 请求的按钮将压缩文件流式传输到它 - 这没有任何意义 - 只需创建一个带有 link 到 zip 路径的锚标记即可下载它。
正如 max 指出的那样,headers: { 'Accept': 'application/zip' }
是访问它的正确格式,但这样做没有任何意义。
编辑:
结帐this answer。浏览器会抛出错误 Resource interpreted as Document but transferred with MIME type application/zip
.
我正在尝试向 Rails 控制器方法发出请求,该方法以压缩文件作为响应。如何发出前端 Axios 请求?
控制器方法:
include ActionController::Streaming
include Zipline
def index
respond_to do |format|
format.zip do
zipline([[@project.attached.url, "#{@project_name.parameterize}.pdf"]], "documents.zip")
end
end
end
如果我使用视图我会做什么:
= link_to "Download projects", company_projects_path(@company, format: :zip)
等效的 axios 请求是什么样的?这不起作用:
const handleClick = () => {
axios
.get(`/projects/${project.id}`, {
headers: { 'Accept': 'application/zip' }
})
.catch(e => console.log(e))
};
所以我发现这对我有用:
<a href={`/projects/${project.id}.zip`} download>Download all</a>
与其使用带有 onClick axios 请求的按钮将压缩文件流式传输到它 - 这没有任何意义 - 只需创建一个带有 link 到 zip 路径的锚标记即可下载它。
正如 max 指出的那样,headers: { 'Accept': 'application/zip' }
是访问它的正确格式,但这样做没有任何意义。
编辑:
结帐this answer。浏览器会抛出错误 Resource interpreted as Document but transferred with MIME type application/zip
.