第一階段
1937年8月13日至9月17日,中國軍隊向駐上海日軍發起攻擊並抗擊日軍增援部隊的登入。
13日,中、日兩軍在上海市區發生小規模衝突。當日晚,國民政府軍事委員會將淞滬警備司令部所屬部隊編為第9集團軍,張治中為總司令,並命令該集團軍於翌日向日軍發動進攻。同時命令空軍協同地面作戰,擔任要地防空。14日上午,中國空軍首先向停舶在黃浦江上的日軍第3艦艇和匯山碼頭;日海軍司令部、公大紗廠等處日軍發動攻擊,炸傷旗艦"出雲"號,第4驅逐機大隊擊落襲擊杭州筧橋機場的日機3架,擊傷1架(參見杭州空戰);陸軍於當日下午向虹口和楊樹浦日軍發動圍攻。15~16日,中國空軍在京滬杭上空共擊落日機40餘架。17日,中國海軍派出魚雷快艇駛至上海外灘再次擊傷"出雲"號。第9集團軍從15日起,向日軍發起多次圍攻,第87師攻占日本海軍俱樂部,第88師沖入日本墳山陣地,後受阻。19日,從西安調來的第36師投入戰鬥,於21日攻入匯山碼頭,嚴重威脅日本海軍陸戰隊。15日,日軍統帥部下令組建上海派遣軍司令部,以松井石根為司令官,下轄第3、第11師2個師團和特種兵一部,由日本國內增援上海作戰。中國於8月20日亦組成第3戰區司令長官部,以馮玉祥為司令長官,顧祝同任副司令長官,陳誠為前敵總指揮,將戰區所轄防區劃分為淞滬圍攻區(部隊為張治中部第9集團軍)和長江南岸(部隊為第54軍)、長江北岸(部隊為第111師)、杭州灣北岸(部隊為張發奎部第8集團軍)、浙東等4個守備區(部隊為劉建緒部第10集團軍),以上4個守備區負責封鎖壓制日軍登入部隊。由於日軍增援部隊於23日晨在鐵路碼頭和川沙鎮以北地區強行登入。第三戰區臨時將長江南岸各守備部隊編組為第15集團軍,由陳誠兼總司令,又抽調3個軍予以加強。日軍第3師第一梯隊在張華浜附近登入時,遭到張治中部警察總隊頑強抵抗。第3師主力登入後,警察總隊不支,撤至南泗塘河西岸據守,張治中組織第87、第36師反擊,挫敗其進攻,雙方於25日隔河對峙。日軍第11師第一梯隊23日在川沙口和石洞口地段登入,時第15集團軍剛編成,部隊未到指定位置,日軍迅即攻占獅子林炮台、月浦和羅店,繼分向瀏河、寶山進攻。下午陳誠所部先後趕到,第18軍協同第54軍實施反擊,當晚收復羅店,次日收復寶山、獅子林和月浦。25日,日軍第11師後續梯隊登入,第15集團軍反擊受阻。雙方於獅子林、月浦、新鎮、羅店至瀏河口一線形成對峙。松井石根為連線和擴大兩個師的登入場,9月1日以第11、第3師各一部從獅子林和吳淞兩面夾擊寶山。守備寶山的第18軍姚子青營擊退日軍多次進攻,頑強堅守至7日,日軍以戰車堵擊城門,集中海陸空火力轟擊,全城燃起烈火,該營官兵全部壯烈犧牲。戰至10日,日軍將兩塊登入場連成一片。第15集團軍予敵重大殺傷後,部隊嚴重減員,13日奉命撤出月浦、楊行、新鎮等陣地;第9集團軍則奉命放棄寧滬鐵路(南京-上海)以東的大部地區。至9月17日,中國軍隊被迫撤至北站、江灣、廟行、羅店、瀏河一線,與日軍對峙。
第二階段
1937年9月17日至11月4日,日軍再次增兵,中國軍隊全線轉入防禦。
日軍在第一階段作戰中雖然占領了淞滬間灘頭陣地,但傷亡甚重,因此決定繼續由國內增派第9、第13、第101三個師團及特種兵一部的重藤支隊(台灣旅)到上海作戰。中國軍隊於21日也調整了部署,第3戰區由蔣介石兼司令長官,劃黃浦江以西、薀藻浜以南為中央作戰地區,朱紹良為總司令,下轄第9集團軍和另2個師;左翼軍以第15集團軍和第19集團軍(新增援的部隊)編成,陳誠為總司令;右翼軍以第8集團軍(原杭州灣北岸守備區部隊編成)、第10集團軍(由湖南調來)編成,張發奎為總司令。全線部隊與日軍展開激烈戰鬥。從22日到10月1日,日軍由國內增援的部隊陸續在淞滬地區登入。23日,日軍集中兵力在羅店方面發起進攻。中國守軍左翼軍兩次調整部署,於10月3日拂曉前轉移至薀藻浜右岸亘陳家行、楊涇河西岸、瀏河鎮之線。從4日開始,日軍以大場鎮為目標發起攻擊。其主力兩個師團猛攻薀藻浜南岸中國左翼軍和中央軍左翼陣地。中央守軍側後受到嚴重威脅。第3戰區即令由後方增援的第22集團軍加入該方面作戰。經10餘日反覆爭奪與激戰,左翼軍傷亡甚重。15日,日軍突過薀藻浜深入守軍陣地約5公里。蔣介石急調第21集團軍10個師加入中央軍序列,以其3個師從大場附近向南路日軍反擊,另以左翼軍4個團在廣福南側向北路日軍反擊,均未突破日軍陣地。22日,日軍集中第3、第13、第101師進攻第21集團軍,在廟行和陳家行之間突破守軍陣地。24日,日軍集中主力一部猛攻大場鎮。守軍與日軍苦戰3日,陣地大部被毀,該鎮於26日失守。蘇州河北岸的中央軍腹背受敵,於27日放棄北站、江灣間陣地,轉移至蘇州河南岸。第88師第524團團附謝晉元,率第1營官兵繼續堅守蘇州河北岸的四行倉庫,孤軍奮戰四晝夜,於31日奉命退入公共租界。左翼軍也轉移至姚家渡到唐河橋一線。日軍隨即進至蘇州河沿岸。由於正面戰線逐漸縮小,第3戰區決定撤消中央軍,軍隊劃分為左、右兩作戰軍,左翼歸陳誠指揮,右翼歸張發奎指揮。左、右翼各3個集團軍,繼續與進攻日軍作戰。
第三階段
1937年11月5日至11日,日軍後援部隊在杭州灣登入,中國守軍由淞滬地區全線撤退。
在兩軍作戰處於膠著狀態,進攻十分困難之際,日軍大本營10月初決定將侵華戰爭主要進攻方向從華北轉向上海方面,急從國內、華北、東北抽調3個師團於20日組成第10軍在杭州灣登入,迂迴上海,協同淞滬地區日軍作戰。5日拂曉,日軍第10軍司令官柳川平助率第6、第18、第114師及國崎支隊(第5師第9旅),突然在杭州灣的全公亭、金山衛間登入,策應上海派遣軍實施迂迴包圍。當時杭州灣北岸的守軍,大部已調去支援上海市區作戰,只有第63師的少數部隊守備,猝不及防。日軍占領沿海地段後,迅以第6師進攻松江和閔行,以第18師進攻金山和廣陳。中國第8集團軍急調第62、第79師分別阻擊日軍第6、第18師,因行動遲緩,致日軍迅速進入黃浦江一線。日軍6日占金山。7日,日軍上海派遣軍和第10軍合編為華中方面軍,松井石根為司令官。企圖對上海守軍迅速達成合圍。戰局急轉直下,8日晚,第3戰區根據蘇州河南岸戰況逆轉,松江方面更為危急的情況,決心令左、右兩翼作戰軍向吳縣、福山線國防陣地轉移。9日下午8時,戰區各部隊開始轉移。11日晚,市區守軍全部撤退,南市守軍千餘人被日軍隔絕,撤入法國租界。上海市區淪陷,戰役結束。
點評
此戰歷時3個月,中國軍隊雖多,但分散在各自防區死打硬拼,注重正面防禦,忽視側翼安全;日軍裝備優良,採取正面強攻戰術,卻屢遭挫敗,後改從側後登入,迂迴成功。日軍參戰兵力達9個師20餘萬,傷亡4萬多;中國軍隊有60餘萬兵力投入作戰,傷亡16萬餘人。淞滬守軍浴血奮戰,使日軍被迫轉移戰略主攻方向,打破其三個月滅亡中國的迷夢,為中國沿海工業的內遷贏得了時間,激發了中國軍民的抗戰熱忱。