feat(upload): include root folder option in S3 folder dropdown and support empty targetFolder (root) on backend
This commit is contained in:
parent
762ae0730a
commit
e4ee7230d1
@ -226,7 +226,8 @@ router.get('/files', async (req, res) => {
|
||||
router.get('/folders', async (req, res) => {
|
||||
try {
|
||||
const folders = await s3Service.listAllFolders('');
|
||||
res.json({ folders });
|
||||
// Include root option as empty string
|
||||
res.json({ folders: [''] as string[] .concat(folders) });
|
||||
} catch (error) {
|
||||
console.error('Error fetching S3 folders:', error);
|
||||
res.status(500).json({ error: 'Failed to fetch S3 folders' });
|
||||
|
||||
@ -83,8 +83,11 @@ export class S3Service {
|
||||
targetFolder?: string
|
||||
): Promise<UploadResult> {
|
||||
const fileExtension = originalName.split('.').pop();
|
||||
const safeFolder = (targetFolder || 'music').replace(/^\/+|\/+$/g, '');
|
||||
const key = `${safeFolder}/${uuidv4()}.${fileExtension}`;
|
||||
const cleaned = typeof targetFolder === 'string' ? targetFolder.replace(/^\/+|\/+$/g, '') : '';
|
||||
const safeFolder = cleaned;
|
||||
const key = safeFolder
|
||||
? `${safeFolder}/${uuidv4()}.${fileExtension}`
|
||||
: `${uuidv4()}.${fileExtension}`;
|
||||
|
||||
const command = new PutObjectCommand({
|
||||
Bucket: this.bucketName,
|
||||
|
||||
@ -131,9 +131,9 @@ export const MusicUpload: React.FC<MusicUploadProps> = ({ onUploadComplete }) =>
|
||||
const data = await res.json();
|
||||
const items = Array.isArray(data.folders) ? data.folders : [];
|
||||
setFolders(items);
|
||||
if (items.length > 0) {
|
||||
// default to first folder if uploads not present
|
||||
const defaultChoice = items.find((f: string) => f.toLowerCase().includes('upload')) || items[0];
|
||||
if (items.length > 0 && targetFolder === 'uploads') {
|
||||
// default target: root (empty) if available, else first item
|
||||
const defaultChoice = items.find((f: string) => f === '') || items[0];
|
||||
setTargetFolder(defaultChoice.replace(/^\/+/, ''));
|
||||
}
|
||||
} catch (e) {
|
||||
@ -154,7 +154,7 @@ export const MusicUpload: React.FC<MusicUploadProps> = ({ onUploadComplete }) =>
|
||||
{folders.length > 0 ? (
|
||||
<Select value={targetFolder} onChange={(e) => setTargetFolder(e.target.value)} bg="gray.800" borderColor="gray.700">
|
||||
{folders.map((f) => (
|
||||
<option key={f} value={f}>{f}</option>
|
||||
<option key={f || 'ROOT'} value={f}>{f || '(root)'}</option>
|
||||
))}
|
||||
</Select>
|
||||
) : (
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user