MyFiles.xlsx
文件的尺寸范围从5KB到150MB,无论大小如何,结果都相同。 在铬,边缘和Firefox上的结果相同。在AJAX调用的成功回调中,在Django Python环境中生成并在编程中单击该元素。 生成并单击该元素的JavaScript代码是:
var link = document.createElement('a');
link.href = response.url;
link.download = dl_name;
document.body.appendChild(link);
link.click();
console.log(link);
document.body.removeChild(link);
提出的帖子表明,这种行为可能会使用交叉原始,但我的URL是相同的Origin。
ajax调用的原始响应标头:
HTTP/1.1 200 OK
日期:2025年1月8日,星期三14:48:37格林尼治标准时间
服务器:WSGISERVER/0.2 CPYTHON/3.11.5
内容类型:应用程序/JSON
X框架选项:否认
内容长度:57
X-content-type-options:nosniff
推荐人 - 政策:相同的原始物质
交叉启动 - opener-policy:相同的矿体
我希望下载文件的名称设置为锚标签的下载属性中的值。
在过去的一周中,我尝试了无数的事情。到目前为止,太多列出,老实说它们只是我的脑袋。它们的范围从改变
href
中的路径,甚至将我的方法更改为使用blob作为文件链接,但这只是导致损坏的XLSX文件,我也无法求解。
作为一个最小的可重现示例,我将锚标签元素放置在上面的锚定标签元素中,是HTML文件中唯一的行。我运行了HTML文件,然后手动单击链接。 我收到相同的行为 - 未重命名下载的文件。尽管我仍然不知道为什么锚标签上的下载属性无法正常工作,但我确实找到了一种使下载使用专有名称的方法。 也许有人为此而苦苦挣扎会很有帮助。
I使用此JavaScript代码创建带有HREF的锚定标签,并模仿A单击以调用Django视图:
function download_export(url, filename, dl_name)
{
var link = document.createElement('a');
link.href = url + "?data_file=" + filename + "&dl_file=" + dl_name
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
在视图中,我让代码获得了服务器文件路径(data_file)和所需的文件名(dl_file),我自己应用了适当的标头并返回了django文件响应。
if request.method == 'GET':
temp_directory = str(settings.TEMP_ROOT)
filename = request.GET.get('data_file')
file_path = temp_directory + '\\' + filename
dl_file = request.GET.get('dl_file')
response = FileResponse(open(file_path, 'rb'))
response['Content-Disposition'] = f'attachment; filename="{dl_file}"'
return response