Foster attended Central Valley High School in Monaca, Pennsylvania, just outside Pittsburgh, where he played both football and basketball. While on the way to a football camp, he survived a racially-motivated shooting in which one of his teammates was killed. Coming out of high school, Foster was the nation's No. 2 receiver ranked 23rd overall in the 2013 class.
College career
During his redshirt sophomore season in 2015, Foster suffered a season-ending shoulder injury after catching 10 receptions 116 yards and two touchdowns in the first three games. He was limited in 2016 and considered transferring before deciding to stay with Alabama. In 2017, he caught 14 passes for 174 yards and one touchdown. Overall, he caught 35 passes for 389 yards and three scores during his career at Alabama.
Professional career
Despite limited college statistics, Foster was invited to the 2018 NFL Scouting Combine due to his athleticism. He clocked a 4.41-second 40-yard dash, fifth overall among receivers.
2018
Foster signed with the Buffalo Bills as an undrafted free agent on May 11, 2018, reuniting with Brian Daboll, his one-time offensive coordinator at Alabama. In Week 2, against the Los Angeles Chargers, he recorded his first two professional receptions, which went for 30 yards. He was waived on October 18, 2018 and was re-signed to the practice squad. He was promoted to the active roster on November 10, 2018. Foster recorded his first 100-yard receiving game against the New York Jets on November 11, finishing with 105 yards on three receptions. Against the Jacksonville Jaguarstwo weeks later following the Bills' bye week, he recorded his first receiving touchdown, a 75-yard pass from Josh Allen. Foster finished that game with two receptions for 94 yards and the touchdown. In week 13 against the Miami Dolphins he only caught 1 ball for 27 yards. Then the next game against the New York Jets on December 9 he made a career high 7 catches on 8 targets for 104 yards. Against the Detroit Lions the following week, Foster excelled again, catching 4 balls for 108 yards, including a 42-yard touchdown from Allen, en route to a 14-13 Bills win. In the season finale, Foster caught four passes for 21 yards and a touchdown in a 42-17 win over Miami. Foster mentioned being cut from the team, demoted to the practice squad, and being brought back again as a "wake-up call" that sparked his late-season success. He finished his rookie season with 27 receptions for 541 yards and 3 touchdowns while averaging 20 yards per reception and was named by Pro Football Focus to its all-rookie team as an offensive flex player.
2019
Foster was sparsely used in the Bills offense during his second professional season, as the team added veterans John Brown and Cole Beasley during the offseason. He also struggled with injuries during preseason. Foster caught just 3 of 18 targets for 64 yards, and was made inactive during the Bills' playoff game against the Houston Texans in favor of Duke Williams. He also rushed twice for 29 yards.
2020
On April 2, 2020, Foster was re-signed to a one-year contract by the Bills.