Bien que la marine royale britannique ait détruit toutes les jonques pendant l'été, l'attaque de Canton fut retardée par une mutinerie des soldats indiens. Les troupes britanniques et françaises firent une reconnaissance de la ville le 22 décembre. La bataille commença par un bombardement naval, le 28 décembre et la capture du fort Lin, loin d'un mille dans les terres.
Les fortifications de la ville fut prises par les forces alliées le 29 décembre mais ces dernières n'ont réussi à prendre la ville elle-même seulement le 5 janvier. Ils ont capturé Ye Mingchen et auraient brûlé une partie de la ville d'après certains rapports.
La facilité des Alliés à remporter cette bataille est une des raisons de la signature du Traité de Tianjin.