Загруженные файлы сохраняются приложением в виде временных файлов.Это означает, что после завершения запроса временный файл автоматически удаляется.Поэтому он больше не существует, когда запрашивается следующая страница.
Один из вариантов - скопировать файл самостоятельно в другое место и сделать его «настоящим» файлом в файловой системе, который не был удален.автоматически больше.Но это тоже имеет свои недостатки: теперь вы сами отвечаете за управление и удаление этих файлов.Это означает, что вам нужно сгенерировать уникальные имена файлов и передать их следующему запросу, а также убедиться, что файл удален после его загрузки, в противном случае эти файлы будут медленно занимать все пространство на диске вашего сервера.Кроме того, это не масштабируется до нескольких серверов и будет работать только для небольших приложений, работающих на одном сервере.
Лучшим вариантом может быть просто выполнить загрузку, обработку и загрузку в одном запросе без какого-либо перенаправления.Пока обработка может быть выполнена в разумные сроки и в памяти, это может быть хорошим вариантом, чтобы избежать сложности.
def upload
original_csv = params[:csv]
output_csv = CSV.generate do |csv|
CSV.foreach(original_csv.path, headers: true) do |row|
# process data
csv << row
end
end
send_data output_csv
end