How can filesystem storage (for blobs, images, etc.) be integrated with (traditional) database storage (e.g. MySQL/Postgres)?
The 'big' players don't even put the images on the same machine. Instead they have "image servers" globally distributed and optimized for pumping out readonly images. In their case, the benefits of distributed processing outweighs the occasional inconsistency (link to non-existent image; vice versa). Yet other machines handle virus checking, scaling, stripping EXIF, etc.        

MySQL cannot store a blob bigger than 4GB (yes, you could (should) chunk it). Even 16MB has some issues (with replication, tuning, etc.) that you may trip over.

If you have scans of meta data, and you have big blobs in the rows, the server spends a lot of time stepping over cow patties.  "Vertical partitioning" is an approach to avoid this problem.  In one implementation, I started with a thumbnail and the EXIF data in the main row.  Eventually I discovered the "cow patty" problem and changed to have those two blobs in a parallel table.  It ran noticeably faster.

I've implemented things either way.  Flip a coin to decide which to do.  Think about your decision for six months, then consider changing to the other mechanism.  Meanwhile, design your code so that you can make that change with minimal hassle.