Skip to content

Commit

Permalink
Merge branch 'dev' into main
Browse files Browse the repository at this point in the history
DCTewi committed Jun 23, 2021

Verified

This commit was signed with the committer’s verified signature.
marekful Marcell Fülöp
2 parents f40910b + eb3dfa5 commit 7553200
Showing 3 changed files with 30 additions and 36 deletions.
58 changes: 24 additions & 34 deletions VirtualGroupEx.Server/Components/MissionFileUploader.razor
Original file line number Diff line number Diff line change
@@ -28,17 +28,15 @@
private bool rendered = false;

private const long maxFileSize = 1024 * 1024 * 10; // 10Mbit
private const int bufferSize = 8 * 1024 * 5; // 5KB

private IBrowserFile loadedFile;
private CancellationTokenSource cancelation = new CancellationTokenSource();

private ActionWaiter waiter = new();

private bool canUpload = false;
private bool isUploading = false;

private bool displayProgress = false;
private int progressPercent;
private string lastId;

private string errorMsg = string.Empty;
@@ -77,26 +75,15 @@
var result = await Uploader.GenerateFileInfoAsync(Mission.Id, loadedFile.Name);
await using var fs = result.Item1;
lastId = result.Item2;
//await loadedFile.OpenReadStream(maxFileSize).CopyToAsync(fs, cancelation.Token);

await using var stream = loadedFile.OpenReadStream(maxFileSize);

var buffer = new byte[bufferSize];
int bytesRead;
double totalRead = 0;

displayProgress = true;

while ((bytesRead = await stream.ReadAsync(buffer, cancelation.Token)) != 0)
{
totalRead += bytesRead;
await fs.WriteAsync(buffer, cancelation.Token);
isUploading = true;
StateHasChanged();

progressPercent = (int)((totalRead / loadedFile.Size) * 100);
StateHasChanged();
}
await loadedFile.OpenReadStream(maxFileSize).CopyToAsync(fs, cancelation.Token);

displayProgress = false;
isUploading = false;
lastId = string.Empty;
StateHasChanged();
}
catch
{
@@ -125,7 +112,7 @@
cancelation.Cancel();

// delete failed files
if (displayProgress && !string.IsNullOrEmpty(lastId))
if (isUploading && !string.IsNullOrEmpty(lastId))
{
await Task.Run(new Action(async () =>
{
@@ -145,7 +132,7 @@
}
}));

displayProgress = false;
isUploading = false;
lastId = string.Empty;
}
}
@@ -208,26 +195,29 @@

@if ((fileInfos?.Count ?? 0) < (~Preference).FilePerMission)
{
var progressCss = "progress " + (displayProgress ? "" : "d-none");
var progressWidthStyle = progressPercent + "%";

<form method="dialog" class="form-inline">
<p class="input-group mb-2">
<label class="pb-2 mr-2">@localizer["mission.file"]</label>
<form method="dialog">
<p class="input-group mb-0">
<InputFile OnChange="LoadFile" AdditionalAttributes="@(new Dictionary<string, object> { { "class", "custom-file" } })"></InputFile>
</p>
@if (canUpload)
@if (isUploading)
{
<p class="mb-2 text-info">
<span class="spinner-grow spinner-grow-sm" role="status"></span>
@localizer["mission.file.uploading"]
</p>
}
else
{
<button class="btn btn-outline-primary btn-sm mb-3" @onclick="UploadFile">
<p class="mb-2">@localizer["mission.file"]</p>
}
@if (!isUploading && canUpload)
{
<button class="btn btn-outline-primary btn-sm" @onclick="UploadFile">
@localizer["operation.upload"]
</button>
}
</form>

<div class="@progressCss">
<div class="progress-bar" role="progressbar" style="width:@progressWidthStyle" area-valuenow="@progressPercent" aria-minvalue="0" aria-maxvalue="100"></div>
</div>

@if (!string.IsNullOrEmpty(errorMsg))
{
<div class="text-danger">@errorMsg</div>
3 changes: 3 additions & 0 deletions VirtualGroupEx.Server/Localization/I18n.json
Original file line number Diff line number Diff line change
@@ -69,6 +69,7 @@
"mission.file.cardTitle": "文件库",
"mission.file.error": "上传失败, 请检查文件大小或者网络环境",
"mission.file.empty": "暂无文件",
"mission.file.uploading": "正在上传, 请保持界面开启",
"mission.description.originPrefix": "任务简介来源前缀",
"mission.description.originPostfix": "任务简介来源后缀",
"mission.description.postfix": "任务简介后缀",
@@ -261,6 +262,7 @@
"mission.file.cardTitle": "ファイルライブラリ",
"mission.file.error": "アップロード失敗、ファイルの大きさ、またはネットワーク環境をチェックしてください",
"mission.file.empty": "ファイルなし",
"mission.file.uploading": "Uploading, Please keep this page on",
"mission.description.originPrefix": "紹介の出典プリフィックス",
"mission.description.originPostfix": "紹介の出典サフィックス",
"mission.description.postfix": "紹介のサフィックス",
@@ -452,6 +454,7 @@
"mission.file.cardTitle": "File Box",
"mission.file.error": "Upload failed, please check the file size or network env",
"mission.file.empty": "Empty",
"mission.file.uploading": "Uploading, Please keep this page on",
"mission.description.originPrefix": "Mission Description Origin Prefix",
"mission.description.originPostfix": "Mission Description Origin Postfix",
"mission.description.postfix": "Mission Description Postfix",
5 changes: 3 additions & 2 deletions VirtualGroupEx.Server/Services/UploadService.cs
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using VirtualGroupEx.Server.Data;

namespace VirtualGroupEx.Server.Services
@@ -91,7 +92,7 @@ public async Task RefreshFileCacheAsync()
public async Task RemoveFileInfoAsync(string infoId)
{
var info = db.UploadFileInfos.FirstOrDefault(i => i.Id == infoId);
var path = Path.Combine(configuration.GetValue<string>("UploadRootPath"), info.MissionId.ToString(), info.Id);
var path = Path.Combine(configuration.GetValue<string>("UploadRootPath"), info?.MissionId.ToString(), info?.Id);

if (File.Exists(path))
{
@@ -107,7 +108,7 @@ public string GetFileQueryString(string infoId)
{
var info = db.UploadFileInfos.FirstOrDefault(i => i.Id == infoId);

return $"?mid={info?.MissionId}&hash={info?.Id}&name={info?.OriginName}";
return $"?mid={info?.MissionId}&hash={info?.Id}&name={HttpUtility.UrlEncode(info?.OriginName)}";
}
}
}

0 comments on commit 7553200

Please sign in to comment.