|
@@ -587,6 +587,46 @@ async function uploadFile() {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+async function uploadFileToOss() {
|
|
|
|
|
+ const fileInput = document.getElementById('upload-oss-file');
|
|
|
|
|
+ const statusEl = document.getElementById('upload-oss-status');
|
|
|
|
|
+ const rawEl = document.getElementById('upload-oss-raw');
|
|
|
|
|
+ const durEl = document.getElementById('upload-oss-duration');
|
|
|
|
|
+ const box = document.getElementById('upload-oss-result-box');
|
|
|
|
|
+
|
|
|
|
|
+ if (!fileInput || !fileInput.files || !fileInput.files[0]) {
|
|
|
|
|
+ alert('请先选择文件'); return;
|
|
|
|
|
+ }
|
|
|
|
|
+ const formData = new FormData();
|
|
|
|
|
+ formData.append('file', fileInput.files[0]);
|
|
|
|
|
+
|
|
|
|
|
+ updateBadge(statusEl, 'pending', '上传中...');
|
|
|
|
|
+ box.style.display = 'block';
|
|
|
|
|
+ const startTime = Date.now();
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ const headers = {};
|
|
|
|
|
+ if (TOKEN()) { headers['Authorization'] = 'Bearer ' + TOKEN(); }
|
|
|
|
|
+ const res = await fetch(BASE_URL() + '/api/upload/oss', { method: 'POST', headers, body: formData });
|
|
|
|
|
+ const text = await res.text();
|
|
|
|
|
+ const duration = Date.now() - startTime;
|
|
|
|
|
+ let data;
|
|
|
|
|
+ try { data = safeJsonParse(text); } catch (e) { data = { _raw: text }; }
|
|
|
|
|
+ if (durEl) durEl.textContent = duration + 'ms';
|
|
|
|
|
+ if (rawEl) rawEl.textContent = JSON.stringify(data, null, 2);
|
|
|
|
|
+ const passed = res.ok && data?.code === 200;
|
|
|
|
|
+ updateBadge(statusEl, passed ? 'success' : 'error', passed ? '通过 ' + res.status : '失败 ' + res.status);
|
|
|
|
|
+ if (!stats.hasOwnProperty('upload-oss-file')) {
|
|
|
|
|
+ stats.total++;
|
|
|
|
|
+ document.getElementById('totalCount').textContent = stats.total;
|
|
|
|
|
+ }
|
|
|
|
|
+ updateStats('upload-oss-file', passed);
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ if (rawEl) rawEl.textContent = 'Error: ' + e.message;
|
|
|
|
|
+ updateBadge(statusEl, 'error', '失败');
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// ===================== 侧切换 =====================
|
|
// ===================== 侧切换 =====================
|
|
|
function switchSide(side) {
|
|
function switchSide(side) {
|
|
|
activeSide = side;
|
|
activeSide = side;
|
|
@@ -1438,7 +1478,7 @@ function renderUploadModule() {
|
|
|
<span class="side-tag side-user">用户侧</span>
|
|
<span class="side-tag side-user">用户侧</span>
|
|
|
<span class="auth-required auth-tag">需认证</span>
|
|
<span class="auth-required auth-tag">需认证</span>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="section-desc">上传单个文件,返回文件访问路径。使用 multipart/form-data 格式,字段名: file</div>
|
|
|
|
|
|
|
+ <div class="section-desc">上传单个文件到本地存储,返回文件访问路径。使用 multipart/form-data 格式,字段名: file</div>
|
|
|
<div class="form-grid">
|
|
<div class="form-grid">
|
|
|
<div class="form-group">
|
|
<div class="form-group">
|
|
|
<label>选择文件</label>
|
|
<label>选择文件</label>
|
|
@@ -1453,6 +1493,29 @@ function renderUploadModule() {
|
|
|
</div>
|
|
</div>
|
|
|
<div class="response-content" id="upload-raw"></div>
|
|
<div class="response-content" id="upload-raw"></div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="test-section">
|
|
|
|
|
+ <div class="section-title">
|
|
|
|
|
+ <span class="method method-post">POST</span>
|
|
|
|
|
+ <span class="path">/api/upload/oss</span>
|
|
|
|
|
+ <span class="side-tag side-user">用户侧</span>
|
|
|
|
|
+ <span class="auth-required auth-tag">需认证</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="section-desc">上传单个文件到阿里云 OSS,返回公网访问 URL。使用 multipart/form-data 格式,字段名: file</div>
|
|
|
|
|
+ <div class="form-grid">
|
|
|
|
|
+ <div class="form-group">
|
|
|
|
|
+ <label>选择文件</label>
|
|
|
|
|
+ <input type="file" id="upload-oss-file" accept="image/*,.pdf,.doc,.docx" style="padding:8px;">
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <button class="btn btn-primary" onclick="uploadFileToOss()">上传到 OSS</button>
|
|
|
|
|
+ <div class="response-box" id="upload-oss-result-box" style="display:none;">
|
|
|
|
|
+ <div class="response-header">
|
|
|
|
|
+ <span class="response-title">响应 <span id="upload-oss-duration" style="color:#999;font-weight:400;"></span></span>
|
|
|
|
|
+ <span class="status-badge" id="upload-oss-status"></span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="response-content" id="upload-oss-raw"></div>
|
|
|
|
|
+ </div>
|
|
|
</div>`;
|
|
</div>`;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1893,7 +1956,7 @@ function runInviteTests() { runBatchTests('invite'); }
|
|
|
function runCouponTests() { runBatchTests('coupon'); }
|
|
function runCouponTests() { runBatchTests('coupon'); }
|
|
|
function runMembershipTests() { runBatchTests('membership'); }
|
|
function runMembershipTests() { runBatchTests('membership'); }
|
|
|
function runPaymentTests() { runBatchTests('payment'); }
|
|
function runPaymentTests() { runBatchTests('payment'); }
|
|
|
-function runUploadTests() { uploadFile(); }
|
|
|
|
|
|
|
+function runUploadTests() { uploadFile(); uploadFileToOss(); }
|
|
|
function runSearchTests() { runBatchTests('search'); }
|
|
function runSearchTests() { runBatchTests('search'); }
|
|
|
function runPlatformAccountTests() { runBatchTests('pa'); }
|
|
function runPlatformAccountTests() { runBatchTests('pa'); }
|
|
|
function runBusinessLicenseTests() { runBatchTests('bl'); }
|
|
function runBusinessLicenseTests() { runBatchTests('bl'); }
|