事變之初,駐上海日軍有海軍陸戰隊1800餘人及武裝日僑4000餘人、飛機40餘架、裝甲車數十輛,分布在虹口租界和楊樹浦,另有海軍艦隻23艘,遊弋在長江口外和黃浦江上,由海軍第1遣外艦隊司令鹽澤幸一指揮。1月28日午夜,陸戰隊分三路突襲閘北,攻占天通庵車站和上海火車北站。上海軍民義憤填膺,擔負滬寧地區衛戍任務的第19路軍3個師共3萬餘人,第60、第61師分駐蘇州、南京一帶,第78師2個旅駐守上海,在總指揮蔣光鼐、軍長蔡廷鍇指揮下奮起抗戰。防守市區的第156旅,在前來接防的憲兵第16團主動配合下,打退由橫浜路、虯江路、寶山路進攻的日軍,29日奪回天通庵車站和上海北站。日軍敗退租界,通過英、美等國領事出麵“調停”,達成停火協議,緩兵待援。上海民眾在中國共產黨的領導和推動下,紛紛組織救護隊和義勇軍,積極支援第19路軍抗戰。29日,日本政府發表聲明威脅中國政府,誣指上海事件是中國排日運動引起的。南京政府於30日倉促遷往洛陽。至2月2日,日軍從國內增調航空母艦2艘、各型軍艦12艘、陸戰隊7000人援滬。蔣光鼐急調第60、第61師參戰。3日,日軍破壞停火協議再向閘北進攻,被守軍擊退。日本內閣遂增派第3艦隊和陸軍久留米混成旅援滬,由第3艦隊司令野村吉三郎接替鹽澤指揮。7日,野村改變攻擊點,以久留米旅進攻吳淞,陸戰隊進攻江灣,企圖從守軍右翼突破。第19路軍依托吳淞要塞及蘊藻浜水網地帶與日軍激戰,第61師將進攻紀家橋、曹家橋及偷渡蘊藻浜的日軍各個消滅,其餘日軍又龜縮租界,由英、美等國領事再次出麵“調停”,以待援兵。
浴血奮戰
上海戰況於日軍不利,日本內閣於2月14日又調陸軍第9師參戰,改由第9師師長植田謙吉統一指揮。同日,中國政府派請纓抗日的張治中任第5軍軍長,率所部第87、第88師及中央陸軍軍官學校教導總隊增援上海,歸第19路軍統一指揮,接替從江灣北端經廟行至吳淞西端的防線,為左翼軍。第19路軍為右翼軍,擔負江灣、大場以南及上海市區的防禦。18日,植田發出最後通牒,要挾中國守軍於20日17時前撤退20公裏,被蔡廷鍇嚴詞拒絕。20日植田令日軍全線總攻,采取中央突破,兩翼卷擊的戰法,以第9師主突江灣、廟行結合部,企圖北與久留米旅圍攻吳淞,南與陸戰隊合圍閘北。守軍第19路軍與第5軍並肩作戰,密切配合,利用長江三角洲水網地帶及既設工事頑強抗擊,並組織戰鬥力強的部隊夾擊突入江灣、廟行結合部之敵。經過6晝夜爭奪戰,日軍遭受重創,由全線進攻轉為重點進攻,再由重點進攻被迫中止進攻。
淞滬抗戰激勵全國,後方官兵紛紛請纓抗戰,蔣介石拒絕再向上海增兵。而日本內閣決定組建上海派遣軍,派前陸軍大臣白川義則任司令官統一指揮。2月27日起,上海日軍又得到陸軍第11、第14師的增援,總兵力增至9萬人、軍艦80艘、飛機300架,戰鬥力驟增。當時中國守軍總兵力不足5萬,裝備又差,而且經一月苦戰,傷亡比較嚴重,左側瀏河地區江防薄弱。白川汲取前三任指揮官正麵進攻失利的教訓,決定從翼側瀏河登陸,兩麵夾擊淞滬守軍。3月1日,指揮第9師等部正麵進攻淞、滬,以第3艦隊護送第11師駛入長江口,從瀏河口、楊林口、七丫口突然登陸,疾速包抄守軍後路。淞滬守軍腹背受敵,被迫退守嘉定、太倉一線。2日日軍攻占上海,3日戰事結束。
停戰
中國方麵,蔣介石於事變發生後複出主理軍事,以中央軍第八十七、八十八師及稅警團、教導團為第五軍,由張治中指揮,於2月16日加入上海作戰;之後蔣再調正在江西圍剿共軍的第十八軍陳誠部入浙。中國軍隊在國民支持下,在江灣一帶抵抗日軍進攻至3月2日,由於日軍在太倉瀏河登陸,形成腹背受敵的局麵,於是全麵從前線後撤。3月3日,日軍占領真如、南翔後宣布停戰。