使用lambda python将文件上载到s3后,使用表单数据更新mysql
我正在尝试使用表单将文件上载到S3。表单中还有其他一些数据,尽管文件确实上传到了bucket中,但我不知道如何获取其余的数据,以便在Lambda函数中使用它来更新RDS实例中的mysql数据库 这是我的表格(改编自)使用lambda python将文件上载到s3后,使用表单数据更新mysql,python,mysql,amazon-web-services,amazon-s3,aws-lambda,Python,Mysql,Amazon Web Services,Amazon S3,Aws Lambda,我正在尝试使用表单将文件上载到S3。表单中还有其他一些数据,尽管文件确实上传到了bucket中,但我不知道如何获取其余的数据,以便在Lambda函数中使用它来更新RDS实例中的mysql数据库 这是我的表格(改编自) 关于我如何才能做到这一点,有什么想法吗?我确信这是一件非常愚蠢的事情,但我已经尝试了好几天了,我似乎无法理解它。一旦您成功地将所有内容上传到S3,您就可以创建一个从S3到Lambda的触发器。该事件包含有关上载的S3对象的所有信息 您还可以读取S3对象,提取所需字段并将其存储到RD
关于我如何才能做到这一点,有什么想法吗?我确信这是一件非常愚蠢的事情,但我已经尝试了好几天了,我似乎无法理解它。一旦您成功地将所有内容上传到S3,您就可以创建一个从S3到Lambda的触发器。该事件包含有关上载的S3对象的所有信息 您还可以读取S3对象,提取所需字段并将其存储到RDS 下面是创建Lambda的S3触发器的文档 您还可以根据新发布、更新或删除自定义触发器
希望这有帮助。一旦您成功地将所有内容上传到S3,您就可以创建一个从S3到Lambda的触发器。该事件包含有关上载的S3对象的所有信息 您还可以读取S3对象,提取所需字段并将其存储到RDS 下面是创建Lambda的S3触发器的文档 您还可以根据新发布、更新或删除自定义触发器
希望这有帮助。我的问题是如何提取字段。我不知道该怎么做那部分。我可以上传、触发lambda、写入RDS,但不能从表单中获取字段。我怎么做?我不确定这个问题。你是什么意思?它可以是一个视频或图片。当你用各种形式的数据发表文章时。它是文件和数据。如果您只是将文件发布到s3,则可以将数据发送到lambda端点并通过文件进行处理。在这种情况下,您需要执行两个post,一个用于S3,另一个用于lamba post,用于表单参数。如果您将其发布到lambda,它将作为json数据发布。因此我无法在s3上接收数据,然后将其“中继”到lambda?很抱歉问这些基本问题,但我是AWS新手。如果您已将多部分数据上载到S3。它应该作为json文件存储在S3对象中。我假设图像是base64数据。您可以读取这些文件并解析这些json对象以获取数据。我的问题是如何提取字段。我不知道该怎么做那部分。我可以上传、触发lambda、写入RDS,但不能从表单中获取字段。我怎么做?我不确定这个问题。你是什么意思?它可以是一个视频或图片。当你用各种形式的数据发表文章时。它是文件和数据。如果您只是将文件发布到s3,则可以将数据发送到lambda端点并通过文件进行处理。在这种情况下,您需要执行两个post,一个用于S3,另一个用于lamba post,用于表单参数。如果您将其发布到lambda,它将作为json数据发布。因此我无法在s3上接收数据,然后将其“中继”到lambda?很抱歉问这些基本问题,但我是AWS新手。如果您已将多部分数据上载到S3。它应该作为json文件存储在S3对象中。我假设图像是base64数据。您可以读取这些文件并解析这些json对象以获取数据。
<form name='form10' action="http://<?= $my_bucket ?>.s3.amazonaws.com/" method="post" enctype="multipart/form-data" onsubmit="return v.exec()">
<input type="hidden" name="key" value="videos/${filename}" />
<input type="hidden" name="acl" value="public-read" />
<input type="hidden" name="X-Amz-Credential" value="<?= $access_key; ?>/<?= $short_date; ?>/<?= $region; ?>/s3/aws4_request" />
<input type="hidden" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" />
<input type="hidden" name="X-Amz-Date" value="<?=$iso_date ; ?>" />
<input type="hidden" name="Policy" value="<?=base64_encode($policy); ?>" />
<input type="hidden" name="X-Amz-Signature" value="<?=$signature ?>" />
<input type="hidden" name="success_action_redirect" value="<?= $success_redirect ?>" />
<table summary="Playlist de Campaña" align=center border="1">
<tr><td colspan="2" align="center">Agregar Videos a Playlist</td></tr>
<tr><td>Selecciona tu Archivo:</td><td><input type="file" name="file" /></td></tr>
<tr><td>Descripción del Video</td><td><input type="text" name="desc_video" value="" size="50"/></td></tr>
<tr><td>Fecha Inicio:
<input type=text name=start_date value="<?PHP echo $fecha_inicio; ?>"><a href="javascript:show_calendar('form10.start_date');" ><img src="images/show-calendar.gif" width="24" height="22" border="0" alt=""></a>
</td><td>Fecha Terminación
<input type=text name=end_date value="<?PHP echo $fecha_termina;?>"><a href="javascript:show_calendar('form10.end_date');" ><img src="images/show-calendar.gif" width="24" height="22" border="0" alt=""></a>
</td></tr>
<tr><td>Hora Inicio:
<select name="hora_inicio">
<?PHP
for ($hr = 0; $hr < 24; $hr++){
echo"<option value=$hr>$hr</option>";
}
?>
</select>:
<select name="mins_inicio">
<?PHP
for ($hr = 0; $hr < 60; $hr+=5){
echo"<option value=$hr>$hr</option>";
}
?>
<option value="59">59</option>
</select></td>
<td>Hora Terminación:
<select name="hora_final">
<?PHP
for ($hr = 0; $hr < 24; $hr++){
if($hr<>23){
echo"<option value=$hr>$hr</option>";
} else {
echo"<option value=$hr selected>$hr</option>";
}
}
?>
</select>:
<select name="mins_final">
<?PHP
for ($hr = 0; $hr < 60; $hr+=5){
echo"<option value=$hr>$hr</option>";
}
?>
<option value="59" selected>59</option>
</select></td>
</tr>
<tr><td colspan="2" align="center"><input type="submit" value="Continuar" /></td></tr>
</table>
<input type="hidden" name="step" value="sube" />
<input type="hidden" name="tipo" value="<?PHP echo $tipo; ?>" />
<input type="hidden" name="id_campana" value="<?PHP echo $id_campana; ?>" />
<input type="hidden" name="fecha_inicio" value="<?PHP echo $fecha_inicio; ?>" />
<input type="hidden" name="fecha_termina" value="<?PHP echo $fecha_termina; ?>" />
</form>
import sys
import logging
import rds_config
import pymysql
#rds settings
rds_host = "xxxxxxxxxxxxxxxxxxxx.rds.amazonaws.com"
name = rds_config.db_username
password = rds_config.db_password
db_name = rds_config.db_name
logger = logging.getLogger()
logger.setLevel(logging.INFO)
try:
conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5)
except:
logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
sys.exit()
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")
def lambda_handler(event, context):
try:
cur = conn.cursor()
cur.execute("INSERT INTO archivos (id_cliente,id_campana,tipo_asset,id_tipo_asset,file_name,original_name,descripcion,file_type,date_begin,date_end,time_begin,time_end,MD5) VALUES (5,11,'Marca',3,'test.png','test.png','este es el video','png','2017-08-01','2017-08-30','00:00:00','23:59:00','90175908345798dhf')")
conn.commit()
except MySQLError as e:
logger.error(e)
return None