Angular4上传和下载

Angular4上传和下载

下载文件

Angular4的单页应用通过Http服务器反向代理后接口的文件流就会放到body中返到客户端,导致浏览器不能识别下载。

  • 下载部分代码如下:
      @Injectable()
      export class HttpService {
        constructor(
          private http: HttpClient,
        )
        {
    
        }
        //Blob请求
        requestBlob(url:any,data?:any):Observable<any>{
          return this.http.request("post",url,{body: data, observe: 'response',responseType:'blob'});
        }
        //Blob文件转换下载
        downFile(result,fileName,fileType?){
          var data=result.body;
          var blob = new Blob([data], {type: fileType||data.type});
          var objectUrl = URL.createObjectURL(blob);
          var a = document.createElement('a');
          a.setAttribute('style', 'display:none');
          a.setAttribute('href', objectUrl);
          a.setAttribute('download', fileName);
          a.click();
          URL.revokeObjectURL(objectUrl);
        }
      }
      @Injectable()
      export class RestService {
        //导出
        export(data:any,fileName:string,fileType?:any){
          let url ='';
          this.httpService.requestBlob(url, data).subscribe(result => {
            this.httpService.downFile(result,fileName,fileType||"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
          })
        }
      }
    
  • 下载部分代码详解
  1. 首先介绍responseType共有 'arraybuffer' | 'blob' | 'json' | 'text' 这么几种类型,blob是大文件用作文件的下载。所以这里http request请求的responseType用blob。
  2. fileType是标准的浏览器支持的文件格式。
  3. 请求后拿到request然后调用downFile将带有blob的body体转换下载,其中利用隐藏a标签和download属性实现下载。

上传文件

由于客户端和接口交互采用json的方式,不使用原有的multipart/form-data方式上传,而是采用base64的方式上传。

  • 上传部分代码如下:
  myUploader(event) {
    let uploadFile = event.files[0];
    let reader = new FileReader();
    reader.onloadend = function() {
      let base64SplitReg=/^data:image\/(jpeg|png|gif);base64,/;
      let base64 = reader.result; // base64就是图片的转换的结果
      base64=base64.replace(base64SplitReg,'');
      uploadFile(base64).subscribe(result=>{
        if(result.success){
          //上传成功
        }else{
          //上传失败
        }
      })
    }.bind(this);
    reader.readAsDataURL(uploadFile);
  }
  //上传文件
  uploadFile(base64fill:any):Observable<ResponseData>{
    let url =this.dfsUrl+'/files';
    let params={
      "filelen":"1",//文件长度,预留,填常量“1”
      "filetype":"jpg",
      "base64fill":base64fill
    }
    return this.http.request('post',url, params).map((res:any) => {
      return res.body;
    },err=>{
      
    })
  }
  • 上传部分代码详解
  1. 创建一个FileReader对象,可以读取文件。
  2. reader.readAsDataURL()是读取文件转换为base64,读取成功后回调reader.onloadend()方法处理具体的上传逻辑。

转载于:https://my.oschina.net/u/3625236/blog/1616664

Angular 中,可以使用 HttpClient 来进行文件上传下载文件上传: 1. 首先,需要在 HTML 文件中添加一个 input 标签,用于选择文件: ```html <input type="file" (change)="onFileSelected($event.target.files)"> ``` 2. 在组件中,需要定义一个方法来处理文件选择事件,并将选中的文件保存在一个变量中: ```typescript selectedFile: File; onFileSelected(files: FileList) { this.selectedFile = files.item(0); } ``` 3. 接下来,需要编写一个方法来将文件上传到服务器: ```typescript onUpload() { const formData = new FormData(); formData.append('file', this.selectedFile); this.http.post('http://example.com/upload', formData) .subscribe(response => { console.log('File uploaded successfully'); }); } ``` 其中,`FormData` 是一个用于将表单数据转换为键值对的类,可以用来构建一个包含文件的表单数据。通过调用 `append` 方法,可以将文件添加到表单数据中。然后,使用 HttpClient 的 `post` 方法将表单数据发送到服务器。 文件下载: 1. 首先,需要定义一个方法来从服务器下载文件: ```typescript onDownload() { this.http.get('http://example.com/download', { responseType: 'blob' }) .subscribe(response => { const blob = new Blob([response], { type: 'application/octet-stream' }); const url = window.URL.createObjectURL(blob); window.open(url); }); } ``` 其中,`responseType: 'blob'` 表示响应数据的类型为 Blob 对象。然后,使用 Blob 构造函数将响应数据转换为 Blob 对象。接着,使用 `createObjectURL` 方法将 Blob 对象转换为 URL 地址,最后调用 `window.open` 方法打开下载链接即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值