Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
ethan
/
appframe
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Commit 579eafcc
authored
2025-11-06 18:45:20 +0800
by
tanghuan
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
测试
1 parent
60c0f661
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
37 additions
and
20 deletions
lib/data/repositories/message/upload_file2.dart
lib/data/repositories/message/upload_file2.dart
View file @
579eafc
...
...
@@ -6,12 +6,12 @@ import 'package:appframe/services/dispatcher.dart';
import
'package:appframe/utils/file_type_util.dart'
;
import
'package:dio/dio.dart'
;
import
'package:flutter/foundation.dart'
;
import
'package:logger/logger.dart'
;
//
import 'package:logger/logger.dart';
import
'package:path/path.dart'
as
path
;
import
'package:uuid/uuid.dart'
;
class
UploadFile2Handler
extends
MessageHandler
{
static
final
upLogger
=
Logger
(
level:
Level
.
debug
);
//
static final upLogger = Logger(level: Level.debug);
@override
Future
handleMessage
(
params
)
async
{
...
...
@@ -34,14 +34,17 @@ class UploadFile2Handler extends MessageHandler {
}
final
startTime
=
DateTime
.
now
();
upLogger
.
d
(
'开始上传文件,
$startTime
'
);
// upLogger.d('开始上传文件,$startTime');
print
(
'====================>开始上传文件,
$startTime
'
);
// final result = await compute(_handleUpload, {'filePath': tempFilePath, 'busi': busi, 'subBusi': subBusi});
final
result
=
await
_handleUpload
(
tempFilePath
,
busi
,
subBusi
);
final
endTime
=
DateTime
.
now
();
upLogger
.
d
(
'完成上传文件,
$endTime
'
);
upLogger
.
d
(
'上传完成,耗时:
${endTime.millisecondsSinceEpoch - startTime.millisecondsSinceEpoch}
毫秒'
);
// upLogger.d('完成上传文件,$endTime');
print
(
'====================>完成上传文件,
$endTime
'
);
// upLogger.d('上传完成,耗时:${endTime.millisecondsSinceEpoch - startTime.millisecondsSinceEpoch} 毫秒');
print
(
'====================>上传完成,耗时:
${endTime.millisecondsSinceEpoch - startTime.millisecondsSinceEpoch}
毫秒'
);
result
[
'startTimestamp'
]
=
startTime
.
toString
();
result
[
'endTimestamp'
]
=
endTime
.
toString
();
...
...
@@ -77,11 +80,13 @@ class UploadFile2Handler extends MessageHandler {
//并行上传分段
var
startTime
=
DateTime
.
now
();
upLogger
.
d
(
"开始异步处理
$startTime
"
);
// upLogger.d("开始异步处理 $startTime");
print
(
'====================>开始异步处理
$startTime
'
);
final
uploadResult
=
await
_uploadInParallel
(
bxeApiService
,
obsApiService
,
logicPrefix
,
filePath
,
maxConcurrency:
30
);
var
endTime
=
DateTime
.
now
();
upLogger
.
d
(
"完成异步处理
$endTime
,耗时
${endTime.millisecondsSinceEpoch - startTime.millisecondsSinceEpoch}
毫秒"
);
// upLogger.d("完成异步处理 $endTime ,耗时 ${endTime.millisecondsSinceEpoch - startTime.millisecondsSinceEpoch} 毫秒");
print
(
'====================>完成异步处理
$endTime
,耗时
${endTime.millisecondsSinceEpoch - startTime.millisecondsSinceEpoch}
毫秒'
);
// 上传结果
String
objectKey
=
uploadResult
[
'objectKey'
]
as
String
;
...
...
@@ -91,10 +96,12 @@ class UploadFile2Handler extends MessageHandler {
//请求合并文件
var
startTime2
=
DateTime
.
now
();
upLogger
.
d
(
"开始处理合并文件
$startTime2
"
);
// upLogger.d("开始处理合并文件 $startTime2");
print
(
'====================>开始处理合并文件
$startTime2
'
);
String
location
=
await
_merge
(
bxeApiService
,
objectKey
,
bucket
,
uploadId
,
tagsMap
);
var
endTime2
=
DateTime
.
now
();
upLogger
.
d
(
"合并文件完成
$endTime2
,耗时
${endTime2.millisecondsSinceEpoch - startTime2.millisecondsSinceEpoch}
毫秒 "
);
// upLogger.d("合并文件完成 $endTime2 ,耗时 ${endTime2.millisecondsSinceEpoch - startTime2.millisecondsSinceEpoch} 毫秒 ");
print
(
'====================>合并文件完成
$endTime2
,耗时
${endTime2.millisecondsSinceEpoch - startTime2.millisecondsSinceEpoch}
毫秒 '
);
//关闭Dio
bxeApiService
.
close
();
...
...
@@ -122,15 +129,18 @@ class UploadFile2Handler extends MessageHandler {
throw
Exception
(
'上传的文件过大'
);
}
upLogger
.
d
(
'文件大小:
$fileSize
'
);
// upLogger.d('文件大小:$fileSize');
print
(
'====================>文件大小:
$fileSize
'
);
//分段大小2M
final
chunkSize
=
Constant
.
obsUploadChunkSize
;
upLogger
.
d
(
'分段大小:
$chunkSize
'
);
// upLogger.d('分段大小:$chunkSize');
print
(
'====================>分段大小:
$chunkSize
'
);
//分段总数
final
totalChunks
=
(
fileSize
/
chunkSize
).
ceil
();
upLogger
.
d
(
'分段总数:
$totalChunks
'
);
// upLogger.d('分段总数:$totalChunks');
print
(
'====================>分段总数:
$totalChunks
'
);
final
randomAccessFile
=
file
.
openSync
();
...
...
@@ -153,13 +163,16 @@ class UploadFile2Handler extends MessageHandler {
final
futures
=
<
Future
>[];
for
(
int
i
=
0
;
i
<
totalChunks
;
i
++)
{
upLogger
.
d
(
'开始处理分段:
$i
'
);
// upLogger.d('开始处理分段:$i');
print
(
'====================>开始处理分段:
$i
'
);
// 控制并发数量
if
(
futures
.
length
>=
maxConcurrency
)
{
upLogger
.
d
(
'超过最大并发数量,等待'
);
// upLogger.d('超过最大并发数量,等待');
print
(
'====================>超过最大并发数量,等待'
);
var
resultList
=
await
Future
.
wait
(
futures
);
upLogger
.
d
(
'等待完成'
);
// upLogger.d('等待完成');
print
(
'====================>等待完成'
);
for
(
var
result
in
resultList
)
{
if
(
result
is
Map
<
String
,
dynamic
>)
{
...
...
@@ -188,7 +201,8 @@ class UploadFile2Handler extends MessageHandler {
chunkSignUrl
=
nextResult
[
'signed_url'
]
as
String
;
}
final
endTime
=
DateTime
.
now
().
millisecondsSinceEpoch
;
upLogger
.
d
(
'分段
$i
,签名耗时:
${endTime - startTime}
毫秒'
);
// upLogger.d('分段$i,签名耗时:${endTime - startTime} 毫秒');
print
(
'====================>分段
$i
,签名耗时:
${endTime - startTime}
毫秒'
);
// await _uploadChunkWithRetry(obsApiService, chunkSignUrl, i, chunk, tagsMap);
// final future = _uploadChunkWithRetry(obsApiService, chunkSignUrl, i, chunk, tagsMap);
...
...
@@ -249,10 +263,12 @@ class UploadFile2Handler extends MessageHandler {
var
maxRetries
=
30
;
final
start
=
DateTime
.
now
();
upLogger
.
d
(
'new Isolate--- 分段
$chunkIndex
,开始时间:
$start
'
);
// upLogger.d('new Isolate--- 分段$chunkIndex,开始时间:$start');
print
(
'====================>new Isolate--- 分段
$chunkIndex
,开始时间:
$start
'
);
for
(
int
attempt
=
0
;
attempt
<=
maxRetries
;
attempt
++)
{
upLogger
.
d
(
'new Isolate--- 分段
$chunkIndex
,第
${attempt + 1}
次,开始时间:
${DateTime.now()}
'
);
// upLogger.d('new Isolate--- 分段$chunkIndex,第 ${attempt + 1} 次,开始时间:${DateTime.now()}');
print
(
'====================>new Isolate--- 分段
$chunkIndex
,第
${attempt + 1}
次,开始时间:
${DateTime.now()}
'
);
try
{
final
obsApiService
=
ApiService
(
defaultHeaders:
{
'Content-Type'
:
''
,
'Accept'
:
''
});
final
resp
=
await
_uploadChunk
(
obsApiService
,
signUrl
,
chunk
,
chunkIndex
);
...
...
@@ -260,8 +276,9 @@ class UploadFile2Handler extends MessageHandler {
final
etags
=
resp
.
headers
[
'etag'
]
as
List
<
String
>;
// tagsMap[chunkIndex + 1] = etags[0];
final
end
=
DateTime
.
now
();
upLogger
.
d
(
'new Isolate--- 分段
$chunkIndex
,完成时间:
$end
,上传段耗时:
${end.millisecondsSinceEpoch - start.millisecondsSinceEpoch}
毫秒'
);
// upLogger.d(
// 'new Isolate--- 分段$chunkIndex,完成时间: $end,上传段耗时:${end.millisecondsSinceEpoch - start.millisecondsSinceEpoch}毫秒');
print
(
'====================>new Isolate--- 分段
$chunkIndex
,完成时间:
$end
,上传段耗时:
${end.millisecondsSinceEpoch - start.millisecondsSinceEpoch}
毫秒'
);
return
Future
.
value
({
'idx'
:
chunkIndex
+
1
,
'etag'
:
etags
[
0
]});
// 上传成功
}
else
{
throw
Exception
(
'Chunk
$chunkIndex
upload failed:
${resp.statusCode}
'
);
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment