<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ### 基于egg 封裝公共上傳類 1. 配置上傳路徑 config.default.js ``` // 上傳文件類型限制 config.multipart = { fileExtensions: [ '.apk' ] // 增加對 apk 擴展名的文件支持 } // add your user config here const userConfig = { // 上傳路徑配置 upload_path: 'app/public/admin/uploads' }; ``` 2.導入上傳類 app / service / uploads.js ``` 'use strict'; const Service = require('egg').Service; // 日期格式化插件 const sd = require('silly-datetime') const path = require('path') const fs = require('fs') // 創建文件夾模塊 const mkdirp = require('mz-modules/mkdirp') const pump = require('mz-modules/pump') /** * 公共文件上傳類 * 安裝 silly-datetime 日期格式化插件 文檔:https://www.npmjs.com/package/silly-datetime * 安裝 mz-modules 模塊 需要里面的 mkdirp 遞歸創建目錄 */ class UploadService extends Service { /** * Public * 上傳文件 支持多文件 單文件上傳 * @return { files: 數據庫保存的上傳路徑 fields: POST 提交的表單字段 } */ async uploadMoreAndSingle() { const { ctx } = this // 獲取多個文件提交的數據流,多文件上傳專用 let parts = ctx.multipart({ autoFields: true }) // let files = [] // 數組形式 let files = {} // 對象形式 let stream while ((stream = await parts()) != null) { // 判斷用戶是否選擇上傳圖片 if (!stream.filename) { ctx.throw('請選擇上傳的圖片!') return } // filename 獲取上傳的文件名 xxx.jpg let filename = stream.filename.toLowerCase() // fieldname 獲取文件表單提交的字段名稱 let fieldname = stream.fieldname // 拼接上傳路徑 let dir = await this._getUploadDir(filename) let target = dir.uploadDir // 創建可寫流 let writeStream = fs.createWriteStream(target) // 讀取文件 && 寫入 && 銷毀當前流 await pump(stream, writeStream) // 對象形式 files = Object.assign(files, { [fieldname]: dir.saveDir }) // 數組形式 // files.push({ // [fieldname]: dir.saveDir // }) } return { // 數據庫保存的上傳路徑 files, // 提交的表單字段 fields: parts.field } } /** * Private * 返回上傳路徑 * @filename 當前 POST 表單獲取的文件流 * @return { uploadDir 上傳保存的硬路徑 saveDir 數據庫保存的路徑 } */ async _getUploadDir(filename) { // 獲取當前日期 const today = sd.format(new Date(), 'YYYYMMDD') // 拼接上傳地址 當前時間 + 上傳目錄 const upload_dir = path.join(this.config.upload_path, today) // 創建文件夾 目錄不存在則創建 await mkdirp(upload_dir) // 以當前時間戳 毫秒數 作為文件名保存 const d = (new Date()).getTime() // 返回圖片保存路徑 app\public\admin\uploads\20190712\1562946142820.jpg const file_dir = path.join(upload_dir, `${d}${path.extname(filename)}`) return { uploadDir: file_dir, // 數據庫保存地址 正則可以一次替換多個路徑 saveDir: file_dir.slice(3).replace(/\\/g, '/') } } } module.exports = UploadService; ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看