Flutter Uploadcare 客户端
Uploadcare 是一个完整的云文件处理平台,可以帮助您更快地发布产品,并专注于您的业务目标,而非文件。使用 Uploadcare,您可以构建基础架构,优化内容、转化率、加载时间、流量和用户体验。

示例
注意: 您可以省略 privateKey,但这样的话只有 Upload API 可用。(CDN API 也可用)。
如何使用该库
// create client with simple auth scheme
final client = UploadcareClient.withSimpleAuth(
publicKey: 'UPLOADCARE_PUBLIC_KEY',
privateKey: 'UPLOADCARE_PRIVATE_KEY',
apiVersion: 'v0.5',
);
// or create client with reqular auth scheme
final client = UploadcareClient.withRegularAuth(
publicKey: 'UPLOADCARE_PUBLIC_KEY',
privateKey: 'UPLOADCARE_PRIVATE_KEY',
apiVersion: 'v0.5',
);
// or more flexible
final client = UploadcareClient(
options: ClientOptions(
authorizationScheme: AuthSchemeRegular(
apiVersion: 'v0.5',
publicKey: 'UPLOADCARE_PUBLIC_KEY',
privateKey: 'UPLOADCARE_PRIVATE_KEY',
),
// rest options...
),
);
UploadcareClient 目前有 4 个 API 部分
final ApiUpload upload;
final ApiFiles files;
final ApiVideoEncoding videoEncoding;
final ApiGroups groups;
您可以单独使用每个 API 部分,例如
final options = ClientOptions(
authorizationScheme: AuthSchemeRegular(
apiVersion: 'v0.5',
publicKey: 'UPLOADCARE_PUBLIC_KEY',
privateKey: 'UPLOADCARE_PRIVATE_KEY',
)
);
final upload = ApiUpload(options: options);
final fileId = await upload.base(File('...some/file'));
// ...etc.
与小部件一起使用
该库提供了 UploadcareImageProvider,用于在小部件生态系统中更有效地使用,如何使用图像提供者
Image(
image: UploadcareImageProvider(
'uploadcare-image-file-uuid',
// optional, apply transformations to the image
transformations: [
BlurTransformation(50),
GrayscaleTransformation(),
InvertTransformation(),
ImageResizeTransformation(Size.square(58))
],
// rest image props...
),
)
取消
您可以使用 CancelToken 取消上传过程,上传部分(auto, base, multipart)的每个方法都接受 cancelToken 属性,您可以使用它来取消上传过程。此功能仅适用于文件上传,因为 Uploadcare 不支持通过 URL 中断上传。
...
final cancelToken = CancelToken();
...
try {
final fileId = await client.upload.multipart(
File('/some/file'),
cancelToken: cancelToken,
);
} on CancelUploadException catch (e) {
// cancelled
}
...
// somewhere in code
cancelToken.cancel();
人脸识别
...
final files = ApiFiles(options: options);
final List<Rect> faces = await files.detectFaces('image-id');
Gif 转视频
final file = CdnFile('gif-id-1')
..transform(GifToVideoTransformation([
VideoFormatTransformation(VideoFormatTValue.Mp4),
QualityTransformation(QualityTValue.Best),
]));
...
VideoPlayerController.network(file.url);
视频编码
...
final videoEncoding = ApiVideoEncoding(options);
final VideoEncodingConvertEntity result = await videoEncoding.process({
'video-id-1': [
CutTransformation(
const const Duration(seconds: 10),
length: const Duration(
seconds: 30,
),
)
],
'video-id-2': [
VideoResizeTransformation(const Size(512, 384)),
VideoThumbsGenerateTransformation(10),
],
});
final Stream<VideoEncodingJobEntity> processingStream = videoEncoding.statusAsStream(
result.results.first.token,
checkInterval: const Duration(seconds: 2),
)..listen((VideoEncodingJobEntity status) {
// do something
})