Я действительно не кодировал это раньше, но у меня есть список имен файлов на мой взгляд.Рядом с ними есть кнопка загрузки.Так, например:
вот разметка представления для этого:
@foreach (CarFileContent fileContent in ModelCarFiles)
{
using (Html.BeginForm("GetFileDownloadUrl", "Car", FormMethod.Get, new { carId = Model.CarId, userId = Model.UserId, @fileCdnUrl = fileContent.CdnUrl }))
{
@Html.Hidden("userId", Model.UserId);
@Html.Hidden("carId", Model.CarId);
@Html.Hidden("fileCdnUrl", fileContent.CdnUrl);
<p><input type="submit" name="SubmitCommand" value="download" /> @fileContent.Name</p>
}
}
При щелчке я отправляю URL CdN в мой метод действия, который вКапот загружает этот файл из Rackspace, а затем копирует его на наш сервер для загрузки пользователем.Таким образом, мой метод действия возвращает URL в файл .zip, к которому у пользователя теперь есть доступ для скачивания.Но когда я проверяю это, он отправляет обратно и перенаправляет меня на пустую страницу, на которой отображается URL, отображаемый в тексте на странице, и все!
"http://www.ourAssetServer.com/assets/20120331002728.zip"
Я не уверен, как вызвать сохранение каквместо этого предложите и оставьте пользователя в том же представлении, в котором он уже находится, или перенаправьте его обратно в то же представление, в котором перечислены файлы для загрузки ...
Я хочу, чтобы это произошло так:
- Пользователь нажимает кнопку загрузки
- Метод действия делает свое дело, загружает файл в серверную часть
- Пользователь, кажется, получает всплывающее окно с сохранением сразу после нажатия кнопки загрузки.
это, наверное, рутина, но я никогда не делал этого раньше.Мне нужна помощь, чтобы выяснить, как отобразить приглашение сохранения как, и как мне следует обработать возврат к моему представлению после того, как мой метод действия получит окончательный URL-адрес загрузки для ZIP-файла ... что мне делать с этим URL в моем действииметод ... вернуть его в вид?Не уверен здесь.
вот метод действия:
[HttpGet]
public string GetFileDownloadUrl(string fileCdnUrl int carId, int userId)
{
string downloadUrl = string.Empty;
downloadUrl = GetFileZipDownloadUrl(carId, userId, fileCdnUrl);
return downloadUrl;
}
downloadUrl , возвращенный в моем методе действия, это "http://www.ourAssetServer.com/assets/20120331002728.zip" строка дляпример отправлен обратно пользователю ... Мне просто нужно выяснить, как подключить этот провод к приглашению сохранить как, а также выяснить, как обрабатывать представление ... я перенаправляю обратно в то же представление или как? ОБНОВЛЕНИЕ:
После более подробного изучения я пришел к следующему:
[HttpGet]
public FilePathResult GetFileDownloadUrl(string fileCdnUrl, int carId, int userId)
{
string downloadUrl = string.Empty;
downloadUrl = rackSpaceTask.GetFileZipDownloadUrl(carId, userId, fileCdnUrl);
int i = downloadUrl.LastIndexOf("/");
string fileName = downloadUrl.Substring(i);
return File(downloadUrl, "application/zip", fileName);
}
Я получаю ошибку 'http://ourAssetServer.com/assets/20120331002728.zip'; is not a valid virtual path
UPDATE # 2
Вот моя последняя попытка с использованием метода перенаправления, чтобы попытаться получить приглашение сохранения, чтобы показать. Что происходит, так это то, что он нажимает на мой GetFileDownloadUrl, но, кажется, никогда не попадает в мой метод действия Redirectи я в конечном итоге перенаправлен на полностью пустую страницу (полностью белую) с URL-адресом http://localhost/Car/GetFileDownloadUrl и просто останавливается там
@foreach (CarContent fileContent in Model.CarFiles)
{
using (Html.BeginForm("GetFileDownloadUrl", "Car", FormMethod.Post, new { carId = Model.CarId, userId = Model.UserId, @fileCdnUrl = fileContent.FileCdnUrl }))
{
@Html.Hidden("userId", Model.UserId);
@Html.Hidden("carId", Model.CarId);
@Html.Hidden("fileCdnUrl", fileContent.FileCdnUrl);
<p><input type="submit" name="SubmitCommand" value="download" /> @fileContent.Name</p>
}
}
public void GetFileDownloadUrl(string fileCdnUrl, int carId, int userId)
{
string cownloadUrl = string.Empty;
cownloadUrl = GetFileDownloadUrl(carId, userId, fileCdnUrl);
RedirectToAction("RedirectToUrl", downloadUrl);
}
public ActionResult RedirectToUrl(string fileUrl)
{
Response.Redirect(fileUrl);
return null;
}
Я не уверен, как следует кодировать RedirectToUrl.... тип возврата и что вы возвращаете, если что-нибудь?держать меня на странице, на которой я был?Я не «думаю», что это даже удар, только мой первый метод.Я поставил точку отладки в Response.Redirect, и она никогда не срабатывает ... только точка отладки в RedirectToAction ("RedirectToUrl", downloadUrl);