flask Vue 上传文件至阿里云OSS对象存储,返回url链接

需求:前端负责将文件传递给后端,后端处理完之后上传到阿里云OSS对象存储,(这里对上传的文件进行论文查重)

Flask

# 允许的扩展名
ALLOWED_EXTENSIONS = {'doc','docx'}


# 检查后缀名是否为允许的文件
def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
endpoint = 'https://oss-cn-shanghai.aliyuncs.com'
AccessKey_ID = "LTAI5tKBwN5KEWCAjzGFK6xGxxx"
AccessKey_Secret = "sNjoIzCeg7liQhS5NY0gEILF5f7Zlyxxx"
bucket_name = "xxxeducation"



class UploadResource(Resource):
    '''上传文件'''
    def put(self):
        uploaded_file = request.files.get("file")
        if uploaded_file is None:
            return {'code': 400, 'message': '文件上传失败!'}
        # 获取文件名
        file_name = uploaded_file.filename
        # 判断文件类型是否符合要求
        file_name_bool = allowed_file(file_name)
        if not file_name_bool:
            return {'code': 400, 'message': '文件格式不正确,却上传doc,docx类型文件!'}
        file_name_doc = file_name.rsplit('.')
        # hash_name = hashlib.md5((file_name.split('.')[0] + str(cruuent_time)).encode('utf-8')).hexdigest() + '.docx'
        # 获取当前时间 时分秒
        now_time = time.strftime('%Y%m%d%H%M%S')
        upload_file_name = file_name_doc[0] + "_" + now_time+ "." +file_name_doc[-1]
        # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        auth = oss2.Auth(AccessKey_ID, AccessKey_Secret)
        bucket = oss2.Bucket(auth, endpoint, bucket_name)
        # 上传文件
        upload_result = bucket.put_object(upload_file_name, uploaded_file)
        if upload_result.status == 200:
            # 上传成功后获取url
            file_url = bucket.sign_url("GET",upload_file_name,60)
            print(file_url)
        # uploaded_file.save(in_data)
            return {'foo': "上传成功"}
        else:
            return {'code': 400, 'message': '上传失败!'}

Vue

h2>文件上传</h2>
    <el-upload
      style="width: 350px"
      class="upload-demo"
      ref="upload"
      :limit="1"
      :file-list="fileList"
      action="#"
      :http-request="httpRequest"
      accept=".doc,.docx"
    >
      <el-button type="primary">点击上传</el-button>
      <div class="el-upload__tip">只能上传doc,docx类型的文件</div>
    </el-upload>



httpRequest(param) {
      let fileObj = param.file; // 相当于input里取得的files
      let data = new FormData(); // FormData 对象
      data.append("file", fileObj); // 文件对象
      axios
        .put(this.baseUrl + "/app/uploads/", data, {
          headers: { "content-type": "multipart/form-data" },
        })
        .then((res) => {
          console.log("结果:", res);
        })
        .catch((error) => {
          console.log("错误:", error);
        });
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季布,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值