亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 Web API 核心下載文件 - Angular 7

從 Web API 核心下載文件 - Angular 7

C#
哈士奇WWW 2022-10-23 14:08:52
我正在嘗試從服務器下載文件,但該文件未顯示其原始內容,而是顯示 [object Object]。WEB API核心[Authorize(AuthenticationSchemes = "Bearer")][HttpGet]public HttpResponseMessage DownloadContractFile(string fileName){    string contentRootPath = _hostingEnvironment.ContentRootPath;    var folderName = Path.Combine(contentRootPath, FileHandler.ContractFilePath, Convert.ToInt32(User.Identity.Name).ToString());    var path = Path.Combine(folderName, fileName);    var memory = new MemoryStream();    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);    using (var stream = new FileStream(path, FileMode.Open))    {        result.Content = new StreamContent(stream);        result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");        result.Content.Headers.ContentDisposition.FileName = Path.GetFileName(path);        result.Content.Headers.ContentType = new MediaTypeHeaderValue(FileHandler.GetContentType(path)); // Text file        result.Content.Headers.ContentLength = stream.Length;        return result;    }}Angular 代碼:服務方法  downloadContractFile(fileName: string) {    const obj: any = { fileName: fileName };    const httpParams: HttpParamsOptions = { fromObject: obj } as HttpParamsOptions;    const httpOptions = {      params: new HttpParams(httpParams),      headers: new HttpHeaders({        'Content-Type': 'application/octet-stream',        'Authorization': 'Bearer ' + this.jwt.getToken      })    };       return this.http.get<Array<any>>(`${this.settings.getApiSettings('uri')}/api/contract/DownloadContractFile`, httpOptions).map( /// <<<=== use `map` here      (response) => {        if (response["status"] == 401) {          this.jwt.redirectToLogin();        }        else if (response["status"] < 200 || response["status"] >= 300) {          throw new Error('This request has failed ' + response["status"]);        }        let data = response;        return data;      }    );  }
查看完整描述

1 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

這是我在項目中用來下載文件的代碼。


控制器代碼:


    [HttpGet("DownloadFile")]

    public async Task<IActionResult> DownloadFile(string fileName = "")

    {

        var response = await DownloadFileFromDatabase(fileName);

        if (response.IsSuccessStatusCode)

        {

            System.Net.Http.HttpContent content = response.Content;

            var contentStream = await content.ReadAsStreamAsync();

            var audioArray = ReadFully(contentStream);

            return Ok(new { response = audioArray, contentType = "audio/wav", fileName });

        }

        else

        {

            throw new FileNotFoundException();

        }

    }

客戶端代碼:


  HandleBase64  (data , contentType,fileName ){ 

    let byteCharacters = atob(data);    

    let byteNumbers = new Array(byteCharacters.length);    

    for (var i = 0; i < byteCharacters.length; i++) 

        byteNumbers[i] = byteCharacters.charCodeAt(i);


    let byteArray = new Uint8Array(byteNumbers);    

    let blob = new Blob([byteArray], {type: contentType});

    if(contentType === "audio/wav"){

        var blobURL=URL.createObjectURL(blob);

        window.open(blobURL);       

    }

    else{

        var blobURL = window.URL.createObjectURL(blob);

        var anchor = document.createElement("a");

        anchor.download = fileName;

        anchor.href = blobURL;

        anchor.click();

    }

}

您也可以在控制器端使用文件流簡單地返回文件。這將自動下載不需要在客戶端處理的文件


    return File(stream, "application/octet-stream"); 


查看完整回答
反對 回復 2022-10-23
  • 1 回答
  • 0 關注
  • 115 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號