首頁 > 軟體

element-ui el-upload實現上傳檔案及簡單的上傳檔案格式驗證功能

2022-11-13 14:00:39

在後臺管理系統中總是會用到上傳檔案的功能,

想實現的樣式如下:(實現上傳檔案後,在input輸入框顯示檔名 )

結構程式碼如下:

 <el-form-item label="使用說明" class="uploadMain" prop="instruction">
              <el-input
                class="uploadInput"
                v-model="productVO.instruction"
                style="width: 75%"
                placeholder="請上傳pdf格式的使用說明檔案"
                :disabled="true"
              >
                <el-upload
                  slot="append"
                  class="uploadbox"
                  ref="upload"
                  name="file"
                  accept=".pdf"    //接受上傳檔案的格式,此處會預設開啟上傳時篩選.pdf格式
                  :show-file-list="false"
                  :multiple="false"  //如果想要一次選擇多個檔案 mulitiple為true
                  action="upload"
                  :on-change="onChange"
                  :auto-upload="false"  //自動上傳,如果此處為true 選擇完檔案就直接上傳了
                >
                  <!-- class="uploadbtn" -->
                  <el-button class="uploadbtn"></el-button>
                </el-upload>
              </el-input>
            </el-form-item>

由於上述結構程式碼開啟上傳檔案時會自動篩選accept的檔案格式,但是在使用者選擇時仍可以自己選擇全部檔案,所以需要前端對上傳檔案進行初步的格式檢驗

前端部分上傳檔案初步檢驗js程式碼如下:

onChange(file) {
            // 校驗格式
            if (['application/pdf'].indexOf(file.raw.type) == -1) {
                this.$message.error('請上傳正確的pdf格式');
                return false;
            }
            this.productVO.instruction = file.name;
            this.productVO.instructionFile = file.raw; //上傳檔案時需要用到二進位制,所以這裡檔案取值為file.raw
        },

上傳至介面時js程式碼如下:

submit(){
     const formData = new FormData();
     formData.append('instruction', this.productVO.instruction);
     formData.append('instructionFile',this.productVO.instructionFile);
    
 
     //呼叫介面
     this.$post('/product/create',formData,{
         baseURL:'/',
         header:{isloading: true,'Content-Type': 'multipart/form-data'}).then()
}

 ".doc"

"application/msword"

".xls"

 "application/vnd.ms-excel"

".docx"

 "application/vnd.openxmlformats-officedocument.wordprocessingml.document"

".xlsx"

 "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

".jpeg"

 "image/jpeg"

".mp3"

"audio/x-mpeg"

".jpg"

 "image/jpeg"

".mp4"

"video/mp4"

".png"

 "image/png"

 ".pdf" "application/pdf"

".ppt"

"application/vnd.ms-powerpoint"

 ".txt"

"text/plain"

".tar"

"application/x-tar"

".wps"

"application/vnd.ms-works"

".zip"

 "application/x-zip-compressed"

".xml"

 "text/plain"

附加:當上傳檔案為多個時,具體程式碼如下:

<el-form-item label="資料" class="uploadMain" prop="entity">
              <el-input
                class="uploadInput"
                v-model="productVO.entity"
                style="width: 75%"
                placeholder="請上傳完整的tif/tiff/shp格式的資料檔案"
                :disabled="true"
              >
                <el-upload
                  slot="append"
                  class="uploadbox"
                  ref="upload"
                  name="file"
                  accept=".tif,.tiff,.shp,.dbf,.prj,.sbn,.sbx,.shx"
                  :show-file-list="false"
                  multiple
                  :file-list="this.productVO.fileList"
                  action="upload"
                  :on-change="onChange"
                  :auto-upload="false"
                >
                  <!-- class="uploadbtn" -->
                  <el-button class="uploadbtn"></el-button>
                </el-upload>
              </el-input>
              <div style="color: #ffc230">此處是文字說明</div>
            </el-form-item>

js程式碼如下:

onChange(file,fileList) {
            // 校驗格式
            if (['image/tiff', ''].indexOf(file4.raw.type) == -1) {
                this.$message.error('請上傳正確的tif/tiff/shp格式');
                return false;
            }else{
                this.productVO.fileList=fileList
                console.log(this.productVO.fileList)
                var listName=[]
                this.productVO.fileList.forEach(function(e){listName.push(e.name)})
                var listFileRaw=[]
                this.productVO.fileList.forEach(function(e){listFileRaw.push(e.raw)})
                this.productVO.entity = listName; //文字方塊顯示所有的檔名
                this.productVO.entityFile = listFileRaw;
            }
           
        },

介面上傳檔案時formData傳參改動如下:

 this.productVO.entityFile.forEach(element => {
                        formData.append('entityFile', element)
                      })

總結

到此這篇關於element-ui el-upload實現上傳檔案及簡單的上傳檔案格式驗證功能的文章就介紹到這了,更多相關element-ui el-upload上傳檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com