1+ import 'dart:convert' ;
2+
3+ import 'package:flutter_picgo/api/upyun_api.dart' ;
14import 'package:flutter_picgo/model/uploaded.dart' ;
5+ import 'package:flutter_picgo/model/upyun_config.dart' ;
6+ import 'package:flutter_picgo/resources/pb_type_keys.dart' ;
7+ import 'package:flutter_picgo/utils/image_upload.dart' ;
28import 'dart:io' ;
3-
9+ import 'package:path/path.dart' ;
410import 'package:flutter_picgo/utils/strategy/image_upload_strategy.dart' ;
11+ import 'package:flutter_picgo/utils/strings.dart' ;
512
613class UpyunImageUpload implements ImageUploadStrategy {
714 @override
8- Future <Uploaded > delete (Uploaded uploaded) {
9- // TODO: implement delete
10- throw UnimplementedError ();
15+ Future <Uploaded > delete (Uploaded uploaded) async {
16+ UpyunUploadedInfo info;
17+ try {
18+ info = UpyunUploadedInfo .fromJson (json.decode (uploaded.info));
19+ } catch (e) {}
20+ if (info != null ) {
21+ await UpyunApi .deleteObject (
22+ info.bucket, info.operator , info.password, info.key);
23+ }
24+ return uploaded;
25+ }
26+
27+ @override
28+ Future <Uploaded > upload (File file, String renameImage) async {
29+ String configStr = await ImageUploadUtils .getPBConfig (PBTypeKeys .upyun);
30+ if (isBlank (configStr)) {
31+ throw UpyunError (error: '读取配置文件错误!请重试' );
1132 }
33+ UpyunConfig config = UpyunConfig .fromJson (json.decode (configStr));
34+ await UpyunApi .putObject (
35+ file, config.operator , config.password, renameImage, config.bucket,
36+ path: config.path);
37+ String wholeKey = joinAll ([config.path ?? '' , renameImage]);
38+ String imagePath =
39+ joinAll ([config.url, '$wholeKey ${config .options ?? '' }' ]);
40+ var uploadedItem = Uploaded (- 1 , '$imagePath ' , PBTypeKeys .upyun,
41+ info: json.encode (UpyunUploadedInfo (
42+ operator : config.operator ,
43+ password: config.password,
44+ bucket: config.bucket,
45+ key: wholeKey,
46+ )));
47+ await ImageUploadUtils .saveUploadedItem (uploadedItem);
48+ return uploadedItem;
49+ }
50+ }
51+
52+ class UpyunError implements Exception {
53+ UpyunError ({
54+ this .error,
55+ });
56+
57+ dynamic error;
58+
59+ String get message => (error? .toString () ?? '' );
1260
1361 @override
14- Future <Uploaded > upload (File file, String renameImage) {
15- // TODO: implement upload
16- throw UnimplementedError ();
62+ String toString () {
63+ var msg = 'UpyunError $message ' ;
64+ if (error is Error ) {
65+ msg += '\n ${error .stackTrace }' ;
66+ }
67+ return msg;
68+ }
69+ }
70+
71+ class UpyunUploadedInfo {
72+ String operator ;
73+ String bucket;
74+ String password;
75+ String key;
76+
77+ UpyunUploadedInfo ({this .operator , this .bucket, this .password, this .key});
78+
79+ UpyunUploadedInfo .fromJson (Map <String , dynamic > json) {
80+ operator = json['operator' ];
81+ bucket = json['bucket' ];
82+ password = json['password' ];
83+ key = json['key' ];
1784 }
1885
19- }
86+ Map <String , dynamic > toJson () {
87+ final Map <String , dynamic > data = new Map <String , dynamic >();
88+ data['operator' ] = this .operator ;
89+ data['bucket' ] = this .bucket;
90+ data['password' ] = this .password;
91+ data['key' ] = this .key;
92+ return data;
93+ }
94+ }
0 commit comments