2012-03-06 1 views
2

У меня есть некоторая неясная проблема, но я постараюсь изо всех сил объяснить.Excel пытается открыть файл для загрузки в IE

У нас есть URL-адреса, сопоставленные с использованием SpringMVC, так что при выполнении запроса POST можно запускать загрузку. Например, запрос

POST /request/bobby.html {POST variables:id=5} 

запустит загрузку файла CSV, связанного с идентификатором 5. Вопрос заключается в том, что в IE, делая это дает вам возможность Open или Save As. Выбор Open откроет CSV-файл, как предусмотрено в MS Excel, но временный файл будет называться bobby.html. Когда пользователь оставляет Excel открытым и пытается загрузить другой идентификатор (скажем, 6), фокус изменится на Excel, но поскольку запрос все еще указывает на bobby.html, файл не обновляется. Вы должны закрыть файл в Excel, прежде чем новое одно имя сможет занять его место, но нет сообщения, чтобы сообщить пользователю закрыть старый файл.

В идеале, я хочу, чтобы имя файла изменилось, но используемый сервлет Spring специально предназначен для файлов * .html только потому, что у нас есть другие приложения, работающие в одном контейнере с другими расширениями.

Я попытался добавить UUID на просьбу просто чтобы выглядеть по-разному в Excel/IE, и он работал в какой-то степени ...

POST /request/bobby.html?uuid=<uuid> {POST variables:id=6} 

сделал выглядеть по-разному в IE, но Excel еще содержал базовый запрос в качестве имени файла. Это позволило предупредить, но сообщив пользователю, что их имя файла «bobby.html», и они не могут открыть другой, может быть более запутанным, чем вообще не предупреждать.

Я также попытался добавить на что-то в конце:

POST /request/bobby.html/<uuid> {POST variables:id=6} 

Любая идея, как сделать эту работу? Я знаю, что этот тип вещей возможен в SpringMVC, но с отображением сервлетов есть способ заставить его работать?

Заранее спасибо.

ответ

0

Я наконец понял ответ на этот вопрос, и он не имеет ничего общего с именем файла. Я изменил заголовок ответа Content-Type на application/octet-stream вместо application/vnd.ms-excel.

0

Вы пробовали сопоставление как /request/bobby_{uuid}.html? Таким образом, имя файла будет уникальным каждый раз. Тогда вы можете просто игнорировать переменную uuid.

Я никогда не пробовал это ... просто сумасшедшая мысль.

+0

Это и варианты этого, похоже, не сработали. – Andy