簡體   English   中英

將來自asp.net核心的blob數據讀取到Angular 7

[英]Read blob data that comes from asp.net core to Angular 7

美好的一天。 請幫助我解決我的問題,我無法正確讀取從后端到我的角度的數據。 我在這里所做的是下載來自后端(asp.net核心)的文件

這是我的控制器的代碼

[HttpPost("Document")]
public HttpResponseMessage Document()
        {
            try
            {
                var file = Request.Form.Files;

                var fileData = _documentToPdf.DocumentToPdf(file[0].OpenReadStream());
                HttpResponseMessage response = null;


                response = new HttpResponseMessage
                {
                    StatusCode = HttpStatusCode.OK,
                    Content = new ByteArrayContent(fileData.ToArray())
                };
                response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
                response.Content.Headers.ContentDisposition.FileName = "pdf.pdf";
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                response.Content.Headers.ContentLength = fileData.Length;

                Console.WriteLine("file data size: " + fileData.Length);


                return response;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                throw;
            }
        }

這是我的角度代碼

uploadAndProgress(files: File[]){
    console.log(files)
    var formData = new FormData();
    Array.from(files).forEach(f => formData.append('file',f))

    this.http.post('http://localhost:5000/api/DocumentToPdf/Document', formData, {reportProgress: true, responseType: 'blob',  observe: 'events'})
      .subscribe(event => {
        if (event.type === HttpEventType.UploadProgress) {
          this.percentDone = Math.round(100 * event.loaded / event.total);
        } else if (event instanceof HttpResponse) {
          this.uploadSuccess = true;
          console.log('Success');
          console.log('event: ' + event);
          this.downloadFile(event, 'download.pdf');
        }
    });
  }

  downloadFile(data: any, filename: string) {
    const blob = new Blob([data], { type: 'application/octet-stream' });
    console.log(blob);
    saveAs(blob, filename);
  }

代碼Console.WriteLine("file data size: " + fileData.Length); 返回65651但是以angular表示的代碼是console.log(blob); 它返回

size: 15
type: "application/octet-stream"

那么為什么它們不相同呢? 因此,我如何正確讀取來自asp.net的blob到我的角度,以便我可以下載它。 非常感謝

你可以這樣

為您服務

url: string = "some url";

getBlob(): Observable<Blob> {
    const headers = new HttpHeaders({
      'Content-Type': 'application/json',
      'Accept': 'application/json'      
    });
    return this.httpClient.get<Blob>(this.url, {headers: headers, responseType: 'blob' as 'json' });
  }

然后在您的組件中

imageBlobUrl: string = null;

getImage() : void {
    this.blobService.getBlob()
      .subscribe((val) => {
          this.createImageFromBlob(val);
        });
  }
  createImageFromBlob(image: Blob) {
    let reader = new FileReader();
    reader.addEventListener("load", () => {
      this.imageBlobUrl = reader.result;
    }, false);
    if (image) {
      reader.readAsDataURL(image);
    }
  }

然后在您看來

  <img [src]="imageBlobUrl">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM