Uploading files is easy. Files to be uploaded can be either placed in a hard-coded location (bad) or stored on the classpath (better). Here is a simple example:
public class NewCompanyPage extends PageObject {
    ...
    @FindBy(id="object_logo")
    WebElement logoField;
    public NewCompanyPage(WebDriver driver) {
        super(driver);
    }
    public void loadLogoFrom(String filename) {
        upload(filename).to(logoField);
    }
}