在本地而不是在服务器上保存文件
Saving a file locally instead of on the server
我有一个 php 脚本,它可以打开一个 csv 文件,编辑它,然后使用 'file_put_contents' 保存它。保存位置与包含脚本的服务器目录相同。
file_put_contents($destination,$string);
但是,我希望用户能够控制文件在其计算机上的保存位置(即本地)。最好在浏览器上使用对话 pop-up。
这将如何实现?我需要在 php 脚本中添加 header 信息吗?提前致谢。
- 要使用 window 的弹出窗口将文件保存在本地,您可以使用 JS(Blob 对象):
// ajax get data from server ( you can push file to server for editting it and return)
// data return of php : return stream_get_contents($file);
$.ajax({
type: "post",
url: url,
data: {...},
success: function (data) {
let blob = new Blob([data], { type: 'application/csv;charset=utf-8;' });
handleSaveCsv(blob);
}
});
async function handleSaveCsv(blob){
if( window.showSaveFilePicker ) {
const handle = await showSaveFilePicker({
suggestedName: 'csvExportName.csv',
types: [{
description: 'csv file',
accept: {'application/csv': ['.csv']},
}],
});
const writable = await handle.createWritable();
await writable.write( blob );
writable.close();
}
else {
const saveCsv = document.createElement( "a" );
saveCsv.href = URL.createObjectURL( blob );
saveCsv.download= 'csvExportName.csv';
saveCsv.click();
setTimeout(() => URL.revokeObjectURL( saveCsv.href ), 6000 );
}
}
window.showSaveFilePicker
用于打开弹出窗口 window
我有一个 php 脚本,它可以打开一个 csv 文件,编辑它,然后使用 'file_put_contents' 保存它。保存位置与包含脚本的服务器目录相同。
file_put_contents($destination,$string);
但是,我希望用户能够控制文件在其计算机上的保存位置(即本地)。最好在浏览器上使用对话 pop-up。
这将如何实现?我需要在 php 脚本中添加 header 信息吗?提前致谢。
- 要使用 window 的弹出窗口将文件保存在本地,您可以使用 JS(Blob 对象):
// ajax get data from server ( you can push file to server for editting it and return)
// data return of php : return stream_get_contents($file);
$.ajax({
type: "post",
url: url,
data: {...},
success: function (data) {
let blob = new Blob([data], { type: 'application/csv;charset=utf-8;' });
handleSaveCsv(blob);
}
});
async function handleSaveCsv(blob){
if( window.showSaveFilePicker ) {
const handle = await showSaveFilePicker({
suggestedName: 'csvExportName.csv',
types: [{
description: 'csv file',
accept: {'application/csv': ['.csv']},
}],
});
const writable = await handle.createWritable();
await writable.write( blob );
writable.close();
}
else {
const saveCsv = document.createElement( "a" );
saveCsv.href = URL.createObjectURL( blob );
saveCsv.download= 'csvExportName.csv';
saveCsv.click();
setTimeout(() => URL.revokeObjectURL( saveCsv.href ), 6000 );
}
}
window.showSaveFilePicker
用于打开弹出窗口 window