El ataque a Cantón se retrasó por un motín en la India,[5] las tropas británicas y francesas hicieron un reconocimiento de la ciudad el 22 de diciembre.[6] La batalla comenzó con un bombardeo naval y la toma del Fuerte de Lin el 28 de diciembre,[4] al día siguiente las tropas desembarcaron por Kupar Creek al sureste de la ciudad.[6] Los chinos pensaban que las fuerzas atacantes intentarían capturar la colina, antes de moverse a las murallas de la ciudad, pero en la mañana del 29 de diciembre, después de un bombardeo naval, 9 soldados franceses subieron las paredes encontrando poca resistencia. 4700 soldados británicos e indios y 950 soldados franceses escalaron las murallas de la ciudad, dejando 13 británicos y dos franceses muertos.[5] Las murallas fueron ocupadas por una semana, a continuación las tropas se trasladaron a las plazas de la ciudad en la mañana del 5 de enero.[6] Algunos informes estiman que miles de chinos murieron o fueron capturados, y cerca de 30.000 casas fueron incendiadas,[7] aunque otras fuentes ponen 450 soldados y 200 civiles como víctimas de China.[4]
El comisionado Ye Mingchen fue capturado y llevado a Calcuta, donde murió un año después.[4] Una vez que los británicos y franceses habían ocupado la ciudad, establecieron una comisión mixta de gobierno.[8] En parte debido a la ocupación en la posterior de la batalla, los chinos querían para evitar una repetición de la batalla en Pekín, por lo que fue firmado el Tratado de Tientsin el 26 de junio de 1858, para poner fin a la Segunda Guerra del Opio.[8][7]