A supertype of supplier and customer allows you to define a relationship between supertype and uploads table, and you can then use a type filter at runtime to get the customers or suppliers with respect to that relationship.
The way you described it, would mean the FK has to check in the table which is named in the field 'BelongsTo', which isn't going to work in practice.
You can also do it differently: you can model the relationship customer - upload in a different table as supplier - upload. This removes the 'belongs to' fk from upload and places it in the two tables modeling the association. So this gives:
CustomerUpload, with two fields: CustomerID and UploadID, both form the PK. CustomerID points to Customer, UploadID points to the actual upload table.
SuppliedUpload, same thing, but now you have a SupplierID and UploadID.
All uploads are still in the Upload table, however you now have the relationship modeled away. No supertypes needed in this case. As you access uploads separately anyway, this is not a problem for you. The only drawback this has is that if you just want to show 'uploads' and 'who they belong to', you have to create more complex sql and have to interpret the rows: you then have to do :
SELECT U.*,
CASE CU.CustomerID IS NULL THEN 0 ELSE 1 END AS BelongsToCustomer,
CASE SU.SupplierID IS NULL THEN 0 ELSE 1 END AS BelongsToSupplier
FROM
Upload U LEFT JOIN CustomerUploads CU ON U.UploadID = CU.UploadID
LEFT JOIN SupplierUploads SU ON U.UploadID = SU.UploadID
e.g. inside a view for example.
You then can consume the belongs to fields I created in your UI. You can also do it differently and fetch customer and supplier related to an upload with prefetch paths, it's up to you.