
# Python语言方案
#### 前提条件
- 已拥有华为云账号且已实名认证。
- 华为云账号未欠费，且有足够金额购买本案例所涉及的资源。
 
#### 操作步骤
1. 创建函数 
   1. 登录[函数工作流控制台](https://console.huaweicloud.com/functiongraph/)，在左侧导航栏选择"函数 \> 函数列表"，单击"创建函数"。
   
   2. 选择"创建空白函数"，填写函数信息，完成后单击"创建函数"。
      - 函数类型：事件函数。
      
      - 区域：华北-北京四。
      
      - 函数名称：输入您自定义的函数名称，此处以"upload-file-1"为例。
      
      - 委托名称：未使用任何委托。
      
      - 运行时：Python 3.6。
       
   
   3. 在"代码"页签，复制如下代码替换默认的函数代码，并单击"部署"更新函数。
      ```
      # -*- coding: utf-8 -*-
      from requests_toolbelt.multipart import decoder
      import base64
      def handler(event, context):
          context.getLogger().info("Function start run.")
          content_type = ''
          if "content-type" in event['headers']: 
              content_type = event['headers']['content-type']
          if "multipart/form-data" not in content_type:
              return {
                  "statusCode": 200,
                  "body": "The request is not in multipart/form-data format.",
                  "headers": {
                      "Content-Type": "application/json"
                  }
              }
          body = event['body']
          #APIG触发器默认对数据进行Base64编码，这里解码
          raw_data = base64.b64decode(body)
          for part in decoder.MultipartDecoder(raw_data, content_type).parts:
              #这里处理数据
              context.getLogger().info(part.content)
          return {
              "statusCode": 200,
              "body": "ok",
              "headers": {
                  "Content-Type": "application/json"
              }
          }
      ```
      
   
   
   
   
2. 配置APIG触发器 
   1. 在upload-file-1函数详情页面，单击"设置 \> 触发器"，开始创建触发器。
   
   2. 单击"创建触发器"，触发器类型选择"API 网关服务(APIG 专享版)"。
      - 实例：选择API实例，若无可用实例，可单击"创建实例"进入创建页面。
      
      - API名称：默认即可，无需修改。
      
      - 分组：选择在APIG创建的API分组，若无分组，可单击"创建分组"跳转至APIG创建。
      
      - 发布环境：RELEASE。
      
      - 安全认证：此处为方便测试，配置"None"，实际业务请选择更安全的认证方式。
      
      - 请求协议：选择"HTTPS"。
      
      - 请求方法：选择"ANY"。
      
      - 后端超时（毫秒）：默认5000毫秒。
       
   
   
   
   
3. 端到端测试 
   在本地创建app.log文件，内容自定义，此处简单举例：
   ```
   start something
   run
   stop all
   ```
   - 以curl工具为例（curl -F的方式主要用的是linux环境），执行如下命令测试：
     ```
     curl -iv {APIG触发器URL} -F upload=@/{本地文件路径}/app.log
     ```
     图1示例   
     ![](https://support.huaweicloud.com/bestpractice-functiongraph/zh-cn_image_0000002129786134.png "点击放大") 
   
   - 以postman工具为例，配置如下参数，配置完成后单击"发送"。
     图2示例   
     ![](https://support.huaweicloud.com/bestpractice-functiongraph/zh-cn_image_0000002129944306.png "点击放大")
     参数名：选择"upload"。
     类型：选择"file"。
     参数值：单击"Upload"，上传刚才创建好的app.log文件。
     
   
   
   在upload-file-1函数详情页面的"监控"页签下，查看日志，可看到文件内容的打印。实际业务中，用户可根据需要修改代码保存数据到对象存储OBS、日志服务LTS等云服务或直接处理。
   图3查看日志   
   ![](https://support.huaweicloud.com/bestpractice-functiongraph/zh-cn_image_0000002129944302.png "点击放大")
   
   
 
