该功能为通过前端上传文件,后端通过ftp将文件传至另一台配置好ftp的windows电脑上。(windows的ftp配置)部署服务的服务器和存文件的服务器不是一台,所以没有把文件存到工程目录下static里面。
前端上传代码如下:

            <el-upload
                ref="upload"
                v-show="form.server"
                class="upload-file"
                drag
                :action="this.doUpload"
                :data="uploadData"
                :auto-upload="false">
                <i class="el-icon-upload"></i>
                <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
                </el-upload>
            <el-button type="primary" @click="submit()">提交</el-button>
            ```

后端代码如下:

@source_blueprint.route('/upload_source_file', methods=['POST', 'GET'])
def upload_source_file():
    # 文件信息准备
    files = request.files['file']
    filename = os.path.splitext(files.filename)[0]
    postfix = os.path.splitext(files.filename)[1]
    hostname = 'xx.xx.xx.xxx'
    username = 'administrator'
    password = 'xxxxxxxxx'
    port = 21
    reload(sys)
    sys.setdefaultencoding('utf-8')
    try:
        # 连接远程ftp创建文件并上传
        ftp = FTP()
        ftp.connect(hostname, port)
        ftp.login(username, password)
        # 判断目录里面是否有该文件夹
        if filename in ftp.nlst():
            # 进入该目录
            ftp.cwd(filename)
            # 如果存在,则在该文件夹存入,以时间唯一命名
            unique_name = str(datetime.now().strftime('%Y-%m-%d')) + '-' + filename + postfix
            ftp.storbinary('STOR %s' % unique_name, files)
            ftp.close()
        else:
            ftp.mkd(filename)
            ftp.cwd(filename)
            unique_name = str(datetime.now().strftime('%Y-%m-%d')) + '-' + filename + postfix
            ftp.storbinary('STOR %s' % unique_name, files)
            ftp.close()
        try:
            number = len(db.session.query(Source).all())
            source = db.session.query(Source).filter(Source.number == number).first()
            source.net_server = 'ftp://xx.xx.xx.xxx/%s/%s' % (filename, unique_name)
            db.session.add(source)
            db.session.commit()
        except Exception as e:
            print e
            db.session.rollback()
            return jsonify(status_code.ADD_NET_SERVER_ERROR)
        return jsonify(status_code.SUCCESS)

    except Exception as e:
        print e
        return jsonify(status_code.FTP_TRANSFER_ERROR)

其原理就是通过搭建的ftp,通过在浏览器输入的ip地址加文件夹及文件名便可下载相应文件,然后在前端做一个a标签即可下载。

Logo

前往低代码交流专区

更多推荐