func checkExif(f *models.File) (passed bool, err error) {

	var cmdOut []byte
	args := []string{"-j", f.FullPath}
	if cmdOut, err = exec.Command("exiftool", args...).Output(); err != nil {
		return false, errors.Errorf("There was an error retrieving file %s metadata: %s", f.FullPath, err)
	}

	var exifs []models.Exif
	if err = json.Unmarshal(cmdOut, &exifs); err != nil {
		return false, errors.Errorf("There was an error parsing file %s metadata: %s", f.FullPath, err)
	}
	f.Exif = exifs[0]
	f.Save()
	workflowExif, _ := reflections.Items(f.Workflow.Exif)

	var checkError string = ""
	for fieldName, fieldValue := range workflowExif {
		if isZeroOfUnderlyingType(fieldValue) {
			continue
		}
		if value, err := reflections.GetField(f.Exif, fieldName); err != nil {
			return false, errors.Errorf("There was an error validating Exif for file %s. Field '%s' doesn't exist:\n %s", f.FullPath, fieldName, err)
		} else {
			if value != fieldValue {
				checkError += fmt.Sprintf("Field '%s' has value '%v', but '%v' was expected\n", fieldName, value, fieldValue)
			}
		}

	}

	if checkError != "" {
		return false, errors.Errorf("There was an error validating Exif for file %s.\n%s", f.FullPath, checkError)
	} else {
		return true, nil
	}
}