vue和ionic上传图片功能实现

一、vue上传图片

(一)代码
 <upload
      action
      name="file"
      :limit="1"
      :show-file-list="true"
      :before-upload="beforeUpload"
 >
<Button icon="ios-cloud-upload-outline">上传图片</Button>
beforeUpload(file) {
            const isLt1M = file.size / 1024 / 1024 < 1;
            if (!isLt1M) {
                this.$Notice.warning({
                        'title': '提示',
                        'desc': '上传图片大小不能超过 1MB!'
                    });
            } else {
                let param = new FormData();
            var vm = this;
            param.append("file", file, file.name);
            let config = {
                headers: { "Content-Type": "multipart/form-data" }
            };
            axios
                .post(vm.kernel + "/medal/uploadPC", param, config)
                .then(uploadRes => {
                vm.formCustom.name = uploadRes.data.data;
                });
            }     
        },
(二) 注意事项

我们可以直接在action事件写后端上传图片的方法,需要在上传之前做一些判断,我们就可以写到beforeLoad方法中,这里直接在beforeLoad中调用了上传图片的方法是因为我需要把token信息和头信息添加进去,但是这样还存在一个问题就是action会将当前路径默认为上传图片的路径,然后前端页面就会报错。可以找一些有没有属性来设置 token和头信息的。

二、ionic上传图片

(一)代码
1、在module中引用FileUploadModule
//上传图片
import { FileUploadModule } from 'ng2-file-upload';

const routes: Routes = [
  {
    path: '',
    component: AddActivityPage
  }
];

@NgModule({
  imports: [
    //上传图片
    FileUploadModule
  ],
  declarations: [AddActivityPage]
})
export class AddActivityPageModule {}
2、HTML中代码
<div class="picPlace">
   //图片回显
   <img id="wizardPicturePreview2" name="picture" src="{{picture}}" style="height:100px;width:190px;position:relative;left:10px;display:block; border:1px solid #CCC" alt="" class="picture-src" title="" /> 
   //上传图片提示
   <a style="color: red;font-size:12px;position:relative;left:10px;">*提示:图片大小不超过1M。 </a>  
   //上传图片 input框type为file
   <input type="file" #file id="file" class="showPicture" style="margin-left: 10px;font-size:15px" ng2FileSelect  [uploader]="uploader" (change)="selectedFileOnChanged(file)"> 
 </div>
3、ts中代码
import { FileUploader } from 'ng2-file-upload';

// 上传图片相关变量
  editPicture: boolean = true;
  data: any;
  picture: string;
  fileName: string;
  // 声明一个FileUploader类型的变量,并将其初始化
  public uploader: FileUploader = new FileUploader({
    url: environment.kernelUrl + '/medal/upload',
    method: 'POST',
    authToken: localStorage.getItem('Authorization'),
    headers: [
      {name: 'companyId', value: localStorage.getItem('schoolNo') + 'BnaL7HrFBqYVsLude4MNVd'}],
    maxFileSize: 1024 * 1024,
    // autoUpload: true,
    removeAfterUpload: true,
    itemAlias: 'multfile'
    // allowedFileType: ['image']
  });
  
  // 选择上传图片
  public selectedFileOnChanged(file: HTMLInputElement) {
    // let length: number;
    this.editPicture = !this.editPicture;
    this.fileName = file.value;
    const fileDot: string = this.fileName.substring(this.fileName.lastIndexOf('.') + 1, this.fileName.length);

    const fileSize = 1 * 1024 * 1024; // 文件限制大小
    const fileSize1 = file.files[0].size;
    if (fileSize1 > fileSize) {
      super.showToast(this.toastCtrl, '图片大小过大!');
      return;
    }

    // 将上传对象的withCredentials设为false,不发送凭据,因此它不会违反通配符+凭证组合。
    this.uploader.onBeforeUploadItem = (item) => {
      item.withCredentials = false;
    };

    // 开始上传
    this.uploader.queue[0].upload();
    this.uploader.queue[0].onSuccess = function (response, status, headers) {
      // 上传文件成功
      if (status === 200) {
        // 上传文件后获取服务器返回的数据
        const temRes = JSON.parse(response);
        this.data = temRes.data;
        localStorage.setItem('picUrl', this.data);
        // 修改页面图片
        const el: Element = document.getElementById('wizardPicturePreview2');
        el.setAttribute('src', this.data);

        // length = data.length;
        // data = data.substring(21, length);
        //  this.picture = this.data;
      } else {
        alert('上传图片失败');
      }
    };
(二) 注意事项

一定要在页面所在的module引用相关的内容,否则会报错。
这里就为我们提供了设置token信息和头信息的属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值