2012-04-02 37 views
2

我們從我們的CdN下載一個文件,然後將該文件的url返回給用戶。我試圖讓這個實現,以便當用戶點擊下載buttton,它會去測試該網址到下載的文件,然後強制保存提示基於該本地URL。不是一個有效的虛擬路徑 - 當試圖從url中返回一個文件時

因此,舉例來說,如果有一個名爲下載頁面上特定的.pdf按鈕,我們最終有代碼在我們的控制器去到CDN和下載文件,壓縮和解則返回一個URL,例如:http://www.ourLocalAssetServer.com/assets/20120331002728.zip

我不確定您是否可以使用File()方法將資源返回給用戶,以便在您擁有該文件的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

這會不會只是壓縮文件的工作在你的虛擬路徑。

您在此使用的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); 
相關問題