flutter 阿里云盘API调用
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
class YunPanUpload {
final aliPanHost = "https://openapi.alipan.com";
Future<Map<String, dynamic>> getUserInfo(accessToken) async {
final resp =
await http.get(Uri.parse('$aliPanHost/oauth/users/info'), headers: {
'Authorization': 'Bearer $accessToken',
});
Map<String, dynamic> map = jsonDecode(resp.body);
return map;
}
Future<Map<String, dynamic>> getDriverInfo(accessToken) async {
final resp = await http.post(
Uri.parse("$aliPanHost/adrive/v1.0/user/getDriveInfo"),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $accessToken',
},
);
Map<String, dynamic> json = jsonDecode(resp.body);
return json;
}
Future<Map<String, dynamic>> createFile(accessToken,Map<String,dynamic> body) async {
final resp = await http.post(
Uri.parse("$aliPanHost/adrive/v1.0/openFile/create"),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $accessToken',
},
body: jsonEncode(body)
);
Map<String, dynamic> json = jsonDecode(resp.body);
return json;
}
Future<Map<String, dynamic>> createDir(accessToken,drive_id) async{
final date = DateTime.now();
int year = date.year;
int month = date.month;
int day = date.day;
final path = "snapshot";
Map<String,dynamic> bodyf = {
'drive_id': drive_id,
'parent_file_id': "root",
'name': path,
'type': 'folder',
'check_name_mode': "refuse",
};
final uploadInfof = await createFile(accessToken,bodyf);
bodyf['parent_file_id'] = uploadInfof['file_id'];
bodyf['name'] = year;
final uploadInfof2 = await createFile(accessToken,bodyf);
bodyf['parent_file_id'] = uploadInfof2['file_id'];
bodyf['name'] = month;
final uploadInfof3 = await createFile(accessToken,bodyf);
bodyf['parent_file_id'] = uploadInfof3['file_id'];
bodyf['name'] = day;
final uploadInfof4 = await createFile(accessToken,bodyf);
return uploadInfof4;
}
Future<http.Response> uploadFile(String url, File file) async {
HttpClient httpClient = new HttpClient();
HttpClientRequest requests = await httpClient.putUrl(Uri.parse(url));
requests.add(file.readAsBytesSync());
final response = await requests.close();
print('Response status: ${response.statusCode}');
await response.transform(utf8.decoder).forEach(print);
httpClient.close();
return http.Response(response.reasonPhrase, response.statusCode);
}
Future<Map<String,dynamic>> complete(accessToken,drive_id,file_id,upload_id) async{
final resp = await http.post(
Uri.parse("$aliPanHost/adrive/v1.0/openFile/complete"),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $accessToken',
},
body: jsonEncode({
'drive_id':drive_id,
'file_id':file_id,
'upload_id':upload_id
})
);
Map<String, dynamic> json = jsonDecode(resp.body);
return json;
}
Future<Map<String,dynamic>> createShare(accessToken,drive_id,fileIdList,expiration,sharePwd) async{
final resp = await http.post(
Uri.parse("$aliPanHost/adrive/v1.0/openFile/createShare"),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $accessToken',
},
body: jsonEncode({
'driveId':drive_id,
'fileIdList':fileIdList,
'expiration':expiration,
'sharePwd':sharePwd
})
);
Map<String, dynamic> json = jsonDecode(resp.body);
return json;
}
Future<Map<String,dynamic>> refreshToken(client_id,client_secret,refresh_token) async{
final resp = await http.post(
Uri.parse("$aliPanHost/oauth/access_token"),
headers: {
'Content-Type': 'application/json',
},
body: jsonEncode({
'client_id':client_id,
'grant_type':'refresh_token',
'client_secret':client_secret,
'refresh_token':refresh_token,
})
);
Map<String, dynamic> json = jsonDecode(resp.body);
return json;
}
}