我使用nodejs和expressjs框架从服务器下载文件'jsonFile.json'。
我正在使用以下代码
res.get('/download', function(req, res) {
res.setHeader('Content-disposition', 'attachment; filename=jsonFile.json');
res.setHeader('Content-Type', 'text/json');
res.download(__dirname + 'jsonFile.json');
}
});
但这导致对整个文件内容的响应。
我希望浏览器让我将文件保存在本地磁盘中。
如何将文件保存在本地磁盘中。???
答案 0 :(得分:23)
让Express设置正确的标题,然后执行此操作:
res.get('/download', function(req, res) {
res.download(__dirname + 'jsonFile.json', 'jsonFile.json');
});
(doc)
编辑,因为您通过AJAX调用请求/download
,您必须更改设置,因为在这种情况下,大多数(所有?)浏览器都不会显示下载对话框。
相反,您可以从前端代码创建一个新窗口来触发对话框:
window.open('/download?foo=bar&xxx=yyy');
答案 1 :(得分:0)
只是为了确认@robert说的话,
因为这件事让我头晕了两天, 而不是使用ajax调用,打开一个带有ajax请求位置的新窗口,例如:
add_action( 'woocommerce_email_after_order_table', 'add_tracking_number_to_order_email', 10, 4 );
function add_tracking_number_to_order_email( $order, $sent_to_admin, $plain_text, $email )
{
// (there is no current user ID for emails notifications)
$has_discount = get_user_meta( $order->get_user_id(), 'billing_salesman', true );
$po_number = get_post_meta( $order->get_id(), '_other_payment-admin-note', true );
if( empty( $has_discount ) && empty( $po_number ) ) return; // Exit if empty
// CSS style
$styles = '<style>
table.salesman-meta{width: 100%; font-family: \'Helvetica Neue\', Helvetica, Roboto, Arial, sans-serif;
color: #737373; border: 1px solid #e4e4e4; margin-bottom:8px;}
table.salesman-meta th, table.tracking-info td{text-align: left; border-top-width: 4px;
color: #737373; border: 1px solid #e4e4e4; padding: 12px; width:50%;}
table.salesman-meta td{text-align: left; border-top-width: 4px; color: #737373; border: 1px solid #e4e4e4; padding: 12px; width:50%;}
</style>';
// HTML Structure
$html_output = '<h2>'.__('Some title').'</h2>
<table class="salesman-meta" cellspacing="0" cellpadding="6">';
if( ! empty( $has_discount ) ){
$html_output .= '<tr class="sales-rep">
<th>' . __( 'Sales Representative' ) . '</th>
<td>' . $has_discount . '</td>
</tr>';
}
if( ! empty( $po_number ) ){
$html_output .= '<tr class="po-num">
<th>' . __( 'PO Number' ) . '</th>
<td>' . $po_number . '</td>
</tr>';
}
$html_output .= '</table><br>'; // HTML (end)
// Output styles CSS + HTML
echo $styles . $html_output;
}
希望这有助于某人。