It looks like you are missing a unique identifier in your firstOrCreate query. The firstOrCreate method will always create a new model if it can't find a match for the query. You need to add a unique identifier to the query, such as an id or slug field, so that the query can find the existing model.
How simultaneous is it... firstOrCreate is potentially a two-step process - read for existing records and write to create a new record; if the first write has not been completed before the second request is handled, then there is no record to find, i.e.
@tykus any idea to handle this situation, this is probably what I am facing. Instead of uploading 2 files, i uploaded 4 files, however on this case only 3 records got created, may be on 4th time the record was already created and finds the id, so it didn't create for that one.