Обычно я бы просто создал объект Bug и его дочерний объект, объект Attachment, в том же HTTP-ответе после того, как пользователь отправил форму.
Если я правильно вас понял, пользовательский ввод состоит из одной формы с вышеупомянутыми полями для названия ошибки, описания и прикрепленного файла. После того, как пользователь заполняет эти поля (включая выбор файла для загрузки), а затем нажимает кнопку Отправить, ваше приложение получает все три этих фрагмента данных одновременно, как переменные POST в HTTP-запросе. (Вложение - это просто еще один бит данных POST, как описано в RFC 1867 .)
Со стороны вашего приложения, в зависимости от того, какую платформу вы используете, вам, вероятно, будет дано имя файла, указывающее на местоположение загруженного файла в некотором подходящем временном каталоге. Например, с помощью модуля Perl CGI вы можете сделать:
use CGI qw(:standard);
my $query = CGI->new;
print "Bug title: " . $query->param("title") . "\n";
print "Description: " . $query->param("description"). "\n";
print "Path to uploaded attachment: " . $query->param("attachment") . "\n";
для получения имени загруженного файла (для удобства данные файла, отправленные пользователем через форму, автоматически сохраняются во временном файле) вместе с его метаданными. Поскольку у вас есть доступ как к текстовым полевым данным, так и к вложенным файлам одновременно, вы можете создавать объекты Bug и Attachment в любом порядке, в котором пожелаете, без необходимости сохранять неполные данные в ответах HTTP.
Или я вас здесь не понимаю?