oss上傳

文件上傳

async handleDrop(event) {
   // drop
   console.log("event", event);
   // console.log(event.dataTransfer.items, '文件上傳')
   this.MessagePrompt('文件上傳中', 'success');
   this.dragTag = 0;
   event.preventDefault();
   this.isDragging = false;

   const items = event.dataTransfer.items;
   let singles = [],
     count = 0,
     length = items.length;
   for (let i = 0; i < items.length; i++) {
     const item = items[i];
     console.log("item----", item);
     const entry = item.webkitGetAsEntry();
     console.log("eventData", entry);
     if (entry.isDirectory) {
       // 文件夾上傳
       console.log('文件夾上傳')
       this.uploadFilesRecursive(entry);
     } else {
       // 文件上傳
       entry.file((file) => {
         count++;
         console.log("singles", file, singles, count, length);
         singles.push(file);
         if (count == length) {
           this.isCompert(singles)
         }
       });
     }
   }
 },

文件夾讀取

async uploadFilesRecursive(entry) {
      let $this = this;
      function getFileData(items) {
        const handle = (list) => {
          const promiseAll = list.map((entry) =>
            entry.isDirectory ? fn(entry) : getFile(entry)
          );
          return Promise.all(promiseAll);
        };
        const fn = (fileSystemEntry) => {
          const reader = fileSystemEntry.createReader();
          return new Promise((res) => {
            reader.readEntries((result) => {
              if (result.length == 0) {
                let name = fileSystemEntry.fullPath.slice(1);
                let fileData = new File([fileSystemEntry], name, { type: "Folder" });

                res(fileData);
              } else {
                let resultFile = result.filter((f) => {
                  if (checkFileName(f.name)) return f;
                  return null;
                });
                if (resultFile.length == 0) {
                  let name = fileSystemEntry.fullPath.slice(1);
                  let fileData = new File([fileSystemEntry], name, { type: "Folder" });

                  res(fileData);
                }

                res(handle(resultFile));
              }
            });
          });
        };
        return handle(items);
      }
      function getFile(entry) {
        if (!checkFileName(entry.name)) return "";
        return new Promise((resolve, reject) => {
          entry.file(
            (file) => {
              let name = entry.fullPath.slice(1);
              let fileData = new File([file], name, {
                type: file.type,
                webkitRelativePath: name,
              });

              resolve(fileData);
            },
            (err) => {
              reject(err);
            }
          );
        });
      }

      // 過濾特殊字符的文件名
      let filterArray = ["._", "~$", ".~"];
      function checkFileName(fileName) {
        if (
          filterArray.filter((f) => {
            if (fileName.startsWith(f)) return f;
          }).length > 0
        )
          return false;
        if (fileName == ".DS_Store") return false;
        return true;
      }

      function flatten(arr) {
        return arr.reduce(
          (acc, val) => (Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val)),
          []
        );
      }

      let list = await getFileData([entry]);

      list = flatten(list);
      list = list.reverse();
      let filterList = list.filter((f) => {
        if (f != "") return f;
      });
      console.log("files", list);

      if (filterList.length == 0) return;
      // 將數(shù)據(jù)分成每組1000條
      function chunkArray(array, chunkSize) {
        const result = [];
        for (let i = 0; i < array.length; i += chunkSize) {
          result.push(array.slice(i, i + chunkSize));
        }
        return result;
      }
      // 將數(shù)據(jù)拆分成每組1000條
      const chunks = chunkArray(filterList, 1000);
      console.log("chunks", chunks);
      // 發(fā)送請求
      // $this.isCompert(list);
    },

判斷文件是否重復

    async isCompert(files) {
      // console.log(files, '接受的文件')
      let $this = this;
      $this.compertFlag = false
      let list = files;
      let nameList = files.map(item => {
        if (item.webkitRelativePath) {
          return {
            name: "/" + item.webkitRelativePath,
            size: item.size
          }
        } else {
          return {
            name: "/" + item.name,
            size: item.size
          }
        }
      })
      let data = {
        FileName: '',
        ProjectId: this.params.ProjectId,
        ProIdentityid: this.params.ProjectIdentityId,
        ParentId: this.params.ParentId,
        Size: ''
      }
      console.log(nameList, data, this.params, 'nameList')
      for (let i = 0; i < nameList.length; i++) {
        console.log(i, '一步了嘛')
        data.FileName = nameList[i].name
        data.Size = nameList[i].size
        const res = await checkProjectfile(data)
        console.log(res, '請求結果')
        if (res.code == 200) {
          let flag
          if (res.data.FileId) {
            obj.fileId = res.data.FileId
            flag = true
          }
          if (flag) {
            // 如果有重名的
            $this.compertShow = true;
            $this.compertKeepList = list[i];
          } else {
            // 不重名
            $this.pushFile(list[i])
            $this.isUploading = true;
            if ($this.allDone) {
              $this.newUpdate($this.upLoadingFiles)
            }
          }
        } else {
          $this.MessagePrompt(res.message, 'error');
        }
      }
    },

添加上傳列表

   //往上傳列表添加文件
    async pushFile(list, flag) {
      console.log(list, '獲取list')
      const data = {}
      //  const res = await getProjectfileToken()
      if (res.code == 200) {
        const client = new OSS({
          // yourRegion填寫B(tài)ucket所在地域。Region填寫為oss-cn-hangzhou单旁。
          // region: "oss-cn-beijing", //我的存儲是北京抬闷,可根據(jù)具體配置自行修改
          region: 'oss-cn-shanghai',
          // 從STS服務獲取的臨時訪問密鑰(AccessKey ID和AccessKey Secret)顶燕。)(后臺接口返回)
          accessKeyId: res.accessKeyId,
          accessKeySecret: res.accessKeySecret,
          // 從STS服務獲取的安全令牌(SecurityToken)粱锐。
          stsToken: res.securityToken,
          // 填寫B(tài)ucket名稱。
          bucket: 'zzl-filerepostorypublic',
          endpoint: "https://oss-cn-shanghai.aliyuncs.com"
        })
        client().multipartUpload(fileName, file, {}).then(res => {
          console.log(res)
        })
      }
      //獲取憑證

    },
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末鸠姨,一起剝皮案震驚了整個濱河市择膝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌油湖,老刑警劉巖巍扛,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乏德,居然都是意外死亡撤奸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門喊括,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胧瓜,“玉大人,你說我怎么就攤上這事瘾晃〈荆” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵蹦误,是天一觀的道長劫拢。 經(jīng)常有香客問我,道長强胰,這世上最難降的妖魔是什么舱沧? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮偶洋,結果婚禮上熟吏,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好牵寺,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布悍引。 她就那樣靜靜地躺著,像睡著了一般帽氓。 火紅的嫁衣襯著肌膚如雪趣斤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天黎休,我揣著相機與錄音浓领,去河邊找鬼。 笑死势腮,一個胖子當著我的面吹牛联贩,可吹牛的內容都是我干的。 我是一名探鬼主播捎拯,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼泪幌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了玄渗?” 一聲冷哼從身側響起座菠,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藤树,沒想到半個月后浴滴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡岁钓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年升略,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屡限。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡品嚣,死狀恐怖,靈堂內的尸體忽然破棺而出钧大,到底是詐尸還是另有隱情翰撑,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布啊央,位于F島的核電站眶诈,受9級特大地震影響,放射性物質發(fā)生泄漏瓜饥。R本人自食惡果不足惜逝撬,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乓土。 院中可真熱鬧宪潮,春花似錦溯警、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谣光,卻和暖如春檩淋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背萄金。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留媚朦,地道東北人氧敢。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像询张,于是被迫代替她去往敵國和親孙乖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內容