diff --git a/public/index.html b/public/index.html
index 257c68b..3468742 100644
--- a/public/index.html
+++ b/public/index.html
@@ -464,11 +464,12 @@ body::before{content:'';position:fixed;inset:0;background:radial-gradient(ellips
-
+
HTTP Mode: Parallel chunked HTTP upload (6 concurrent 32 MB parts). Aspera-class speed — no UDP needed.
+
Electron App — Aspera-speed desktop application (coming soon)
diff --git a/server.js b/server.js
index c34727d..c64490f 100644
--- a/server.js
+++ b/server.js
@@ -455,22 +455,12 @@ app.post("/api/s3/test", requireAdmin, async (req, res) => {
return res.status(400).json({ success: false, error: "Bucket, Access Key ID, and Secret Key are required to test" });
const testClient = buildS3Client(testCfg);
- const testKey = `_dragonwind_test_${Date.now()}.txt`;
try {
- // Upload a tiny test file
- await testClient.send(new PutObjectCommand({
- Bucket: testCfg.bucket,
- Key: testKey,
- Body: Buffer.from("Dragon Wind S3 connection test"),
- ContentType: "text/plain",
- }));
- // Delete it immediately
- try {
- await testClient.send(new DeleteObjectCommand({ Bucket: testCfg.bucket, Key: testKey }));
- } catch (_) { /* delete failure is non-fatal */ }
+ // Test by checking if bucket exists and is accessible
+ await testClient.send(new HeadBucketCommand({ Bucket: testCfg.bucket }));
- res.json({ success: true, message: "S3 connection confirmed! Test file uploaded and deleted successfully." });
+ res.json({ success: true, message: "✓ S3 connection confirmed! Credentials are valid and the bucket is accessible." });
} catch (err) {
let friendly = err.message;
if (err.name === "NoSuchBucket") friendly = `Bucket "${testCfg.bucket}" does not exist`;