我们从CdN下载文件,然后将该下载文件的URL返回给用户。我正在努力实现这一点,以便当用户点击下载按钮时,它会测试该下载文件的URL,然后根据该本地URL强制保存提示。
例如,如果页面上有一个名为download的按钮用于特定的.pdf,我们最终会在我们的控制器中找到cdn并下载文件的代码,压缩它然后返回一个url,例如:{{3 }}
我不确定您是否可以使用File()方法将资源返回给用户,以便在您拥有该文件的URL而不是系统目录虚拟路径时导致保存提示。
那么如何才能使用url?我需要下载按钮最终强制保存提示,给出一个URL,例如上面这个例子生成的内容?不是我使用的是POST,而不是GET,所以不确定在这种情况下我应该使用哪一个,除了这不能用于强制保存提示。它正在击中我的GetFileDownloadUrl,但最终错误称它不是虚拟路径。
这是我的代码:
@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>
}
}
public ActionResult GetFileDownloadUrl(string fileCdnUrl, int carId, int userId)
{
string downloadUrl = string.Empty;
// take the passed Cdn Url and go and download that file to one of our other servers so the user can download that .zip file
downloadUrl = GetFileZipDownloadUrl(carId, userId, fileCdnUrl;
// now we have that url to the downloaded zip file e.g. http://www.ourLocalAssetServer.com/assets/20120331002728.zip
int i = downloadUrl.LastIndexOf("/");
string fileName = downloadUrl.Substring(i);
return File(downloadUrl, "application/zip", fileName);
}
错误:不是有效的虚拟路径
答案 0 :(得分:0)
除了zip文件位于虚拟路径中之外,这不起作用。
您在此处使用的File方法File(string,string,string)需要一个将用于创建FilePathResult的fileName。
另一个选择是下载它(使用WebClient.DownloadData或DownloadFile方法)并传递字节数组或文件路径(取决于您选择的那个)。
var webClient = new Webclient();
byte[] fileData = webClient.DownloadData(downloadUrl);
return File(fileData, "application/zip", fileName);
你得到文件名所以得到“/”索引的行是不必要的,因为你可以使用:
string fileName = System.IO.Path.GetFileName(downloadUrl);