docs: def iter_encode(self, boundary, blocksize=4096):
          """Yields the encoding of this parameter
          If self.fileobj is set, then blocks of ``blocksize`` bytes are read and
          yielded."""
          total = self.get_size(boundary)
          current = 0
          if self.value is not None:
              block = self.encode(boundary)
              current += len(block)
              yield block
              if self.cb:
                  self.cb(self, current, total)
          else:
              block = self.encode_hdr(boundary)
              current += len(block)
              yield block
              if self.cb:
                  self.cb(self, current, total)
              last_block = ""
              encoded_boundary = "--%s" % encode_and_quote(boundary)
              boundary_exp = re.compile("^%s$" % re.escape(encoded_boundary),
                                        re.M)
              while True:
                  block = self.fileobj.read(blocksize)
                  if not block:
                      current += 2
                      yield "\r\n"
                      if self.cb:
                          self.cb(self, current, total)
                      break
                  last_block += block
                  if boundary_exp.search(last_block):
                      raise ValueError("boundary found in file data")
                  last_block = last_block[-len(encoded_boundary) - 2:]
                  current += len(block)
                  yield block
                  if self.cb:
                      self.cb(self, current, total)