在本地而不是在服务器上保存文件

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