文档章节

轻松实现函数计算文件上传下载

阿里巴巴云原生
 阿里巴巴云原生
发布于 02/06 10:32
字数 1889
阅读 68
收藏 0

3 月,跳不动了?>>>

简介:这是一个包含了函数计算每种 Runtime 结合 HTTP Trigger 实现文件上传和文件下载的示例集。我们知道不同语言在处理 HTTP 协议上传下载时都有很多中方法和社区库,特别是结合函数计算的场景,开发人员往往需要耗费不少精力去学习和尝试。本示例集编撰的目的就是节省开发者甄别的精力和时间,为每种语言提供一种有效且符合社区最佳实践的方法,可以拿来即用。

这是一个包含了函数计算每种 Runtime 结合 HTTP Trigger 实现文件上传和文件下载的示例集。每个示例包括:

  • 一个公共 HTML 页面,该页面有一个文件选择框和上传按钮,会列出已经上传的文件,点击某个已上传的文件可以把文件下载下来;
  • 支持文件上传、下载和列举的函数。

我们知道不同语言在处理 HTTP 协议上传下载时都有很多中方法和社区库,特别是结合函数计算的场景,开发人员往往需要耗费不少精力去学习和尝试。本示例集编撰的目的就是节省开发者甄别的精力和时间,为每种语言提供一种有效且符合社区最佳实践的方法,可以拿来即用。 file 当前已支持的 Runtime 包括

  • nodejs
  • python
  • php
  • java

计划支持的 Runtime 包括

  • dotnetcore

不打算支持的 Runtime 包括

  • custom

<a name="2a0zc"></a>

使用限制

由于函数计算对于 HTTP 的 Request 和 Response 的 Body 大小限制均为 6M,所以该示例集只适用于借助函数计算上传和下载文件小于 6M 的场景。对于大于 6M 的情况,可以考虑如下方法:

  1. 分片上传,把文件切分成小块,上传以后再拼接起来。
  2. 借助于 OSS,将文件先上传 OSS,函数从 OSS 上下载文件,处理完以后回传 OSS。
  3. 借助于 NAS,将大文件放在 NAS 网盘上,函数可以像读写普通文件系统一样访问 NAS 网盘的文件。

<a name="nLp5V"></a>

快速开始

<a name="L7ZZH"></a>

安装依赖

在开始之前请确保开发环境已经安装了如下工具:

<a name="Qkqwe"></a>

构建并启动函数

克隆代码:

git clone https://github.com/vangie/fc-file-transfer

本地启动函数:

$ make start
...
HttpTrigger httpTrigger of file-transfer/nodejs was registered
        url: http://localhost:8000/2016-08-15/proxy/file-transfer/nodejs
        methods: [ 'GET', 'POST' ]
        authType: ANONYMOUS
HttpTrigger httpTrigger of file-transfer/python was registered
        url: http://localhost:8000/2016-08-15/proxy/file-transfer/python
        methods: [ 'GET', 'POST' ]
        authType: ANONYMOUS
HttpTrigger httpTrigger of file-transfer/java was registered
        url: http://localhost:8000/2016-08-15/proxy/file-transfer/java
        methods: [ 'GET', 'POST' ]
        authType: ANONYMOUS
HttpTrigger httpTrigger of file-transfer/php was registered
        url: http://localhost:8000/2016-08-15/proxy/file-transfer/php
        methods: [ 'GET', 'POST' ]
        authType: ANONYMOUS
function compute app listening on port 8000!

make start 命令会调用 Makefile 文件中的指令,通过 fun local 在本地的 8000 端口开放 HTTP 服务,控制台会打印出每个 HTTP Trigger 的 URL 、支持的 HTTP 方法,以及认证方式。

<a name="rHCzc"></a>

效果演示

上面四个 URL 地址随便选一个在浏览器中打开示例页面。

<a name="ykho5"></a>

接口说明

所有示例都实现了下述四个 HTTP 接口:

  • GET / 返回文件上传 Form 的 HTML 页面
  • GET /list 以 JSON 数组形式返回文件列表
  • POST /uploadmultipart/form-data格式上传文件
    • fileContent 作为文件字段
    • fileName 作为文件名字段
  • GET /download?filename=xxxapplication/octet-stream 格式返回文件内容。

此外为了能正确的计算相对路径,在访问根路径时如果不是以/结尾,都会触发一个 301 跳转,在 URL 末尾加上一个/

<a name="GaJhH"></a>

不同语言的示例代码

<a name="6NrwA"></a>

已知问题

  1. 文件大小限制
  2. fun local 实现存在已知问题,上传过大的文件会自动退出,未来的版本会修复。
  3. 部署到线上需要绑定自定义域名才能使用,否则 HTML 文件在浏览器中会被强制下载而不是直接渲染。

<a name="hBLuR"></a>

招聘

<a name="AGIIm"></a>

TL;DR

阿里云 - 云原生应用平台 - 基础软件中台团队(原容器平台基础软件团队)诚邀 Kubernetes/容器/ Serverless/应用交付技术领域专家( P6-P8 )加盟。

工作年限:建议 P6-7 三年起,P8 五年起,具体看实际能力。<br />工作地点:

  • 国内:北京,杭州,深圳;
  • 海外:旧金山湾区、西雅图

简历立刻回复,2~3 周出结果。节后入职。

<a name="JJ7qi"></a>

工作内容

基础产品事业部是阿里云智能事业群的核心研发部门,负责计算、存储、网络、安全、中间件、系统软件等研发。而云原生应用平台基础软件终态团队致力于打造稳定、标准、先进的云原生应用系统平台,推动行业面向云原生技术升级与革命。

在这里,既有 CNCF TOC 和 SIG 联席主席,也有 etcd 创始人、K8s Operator 创始人与 Kubernetes 核心维护成员组成的、国内最顶尖的 Kubernetes 技术团队。

在这里,你将同来自全球的云原生技术领域专家们(如 Helm 项目的创始人、Istio 项目的创始人)密切合作,在独一无二的场景与规模中从事 Kubernetes、Service Mesh、Serverless、Open Application Model ( OAM )等云计算生态核心技术的研发与落地工作,在业界标杆级的平台上,既赋能阿里巴巴全球经济体,更服务全世界的开发者用户。

  1. 以 Kubernetes 为核心,推动并打造下一代 "以应用为中心" 的基础技术体系;在阿里经济体场景中,研发和落地“以应用为中心”的基础设施架构和基于 Open Application Model ( OAM )的下一代 NoOps 体系,让 Kubernetes 与云原生技术栈发挥出真正的价值和能量;

<br />

  1. 研发多环境复杂应用交付核心技术;结合阿里与生态中的核心业务场景,打造多环境复杂应用交付的业界标准与核心依赖(对标 Google Cloud Anthos 和 Microsoft Azure Arc );

<br />

  1. 云原生应用平台核心产品及后端架构设计与开发工作;在生态核心技术与前沿架构的加持下,在世界级云厂商的平台场景中,用技术打造持续的云产品生命力与竞争力;

<br />

  1. 持续推动阿里经济体应用平台架构演进,包括 Serverless 基础设施、标准云原生标准 PaaS 构建、新一代应用交付体系构建等核心技术工作。

技术要求:Go/Rust/Java/C++,Linux,分布式系统

<a name="1ZfhB"></a>

简历提交

lei.zhang AT alibaba-inc.com

阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

© 著作权归作者所有

阿里巴巴云原生

阿里巴巴云原生

粉丝 83
博文 305
码字总数 976580
作品 0
杭州
私信 提问
加载中

评论(0)

利用函数计算多实例并发实现秒级转存超大文件

场景 从指定 URL 下载文件,并将其转存到指定的 OSS Bucket 中。 问题难点 文件非常大,可能有几个 G 甚至十几 G。 转存速度要快,转存时间要控制在秒级。 需要走公网。 以往的实现方法 1. 利...

1005430667418011
2018/09/06
0
0
Akka实战:HTTP大文件断点上传、下载,秒传

访问:https://github.com/yangbajing/scala-applications/tree/master/file-upload获取本文所述完整源码,包括Akka HTTP后端和HTML5实现的前端。 在很多应用里面都会有类似大文件上传的需求...

羊八井
2019/02/23
94
0
字节跳动面试官,我也实现了大文件上传和断点续传

前言 前几天看到一个文章,感触很深 字节跳动面试官:请你实现一个大文件上传和断点续传 作者从0实现了大文件的切片上传,断点续传,秒传,暂停等功能,深入浅出的把这个面试题进行了全面的剖...

蜗牛老湿
02/03
0
0
[雪峰磁针石博客]MD5值重复文件多进程检查工具check_md5.py - 性能测试工具开发

MD5简介 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laborator...

磁针石
2018/08/18
0
0
使用腾讯云无服务器云函数(SCF)分析天气数据

欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:李想 无服务器云函数(SCF)是腾讯云提供的Serverless执行环境,也是国内首款FaaS(Function as a Service,函数即服务) 产品。...

云加社区
2018/01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

HTML使用雪碧图做背景

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>雪碧图背景图片使用</title> <style> ......

布鲁斯里
28分钟前
20
0
并发编程的艺术07-非阻塞同步演进

前言 不知道大家有没有发现几乎每个专业领域中都充斥着很多抽象的专业名词,如果没有相关的基础知识很难知道这些专业名词是什么意思,就比如说我们的这个标题“粗粒度同步”。川建国听了想骂...

黑帽子技术
29分钟前
20
0
IOS 自动化运维

iOS如何实现自动化打包 iOS自动打包ipa 关于 iOS 批量打包的总结

IT追寻者
31分钟前
24
0
Android 开发技术周报 Issue#274

新闻/News Play Store搜索结果中现显示APP评分、容量和下载量信息 谷歌发布安卓GPU工具:优化手机GPU性能 可OTA更新驱动 Android-x86 9.0-r2 稳定版发布 在PC上运行 Android 教程 抖音包大小...

inferjay
31分钟前
26
0
antd vue 使用setFieldsValue无效的一种可能解决方案

今早遇到的情况是渲染完成之前就对form赋值,因此可以通过setTimeout来解决 解决方案 将代码中的setFieldsValue部分作为函数体嵌入setTimeout,如下: setTimeout(() => { ------setFieldsVa...

SilentSong
37分钟前
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部