
Research
/Security News
60 Malicious Ruby Gems Used in Targeted Credential Theft Campaign
A RubyGems malware campaign used 60 malicious packages posing as automation tools to steal credentials from social media and marketing tool users.
react-filezone
Advanced tools
filezone: A Robust, Flexible React File Upload Library with Advanced Features and Seamless User Experience
A powerful, flexible React file upload library with advanced features and a seamless user experience.
npm install react-filezone
# or
yarn add react-filezone
Option | Type | Default | Description |
---|---|---|---|
mode | 'single' | 'multiple' | 'multiple' | Upload mode |
maxFiles | number | 3 | Maximum number of files |
maxFileSize | number | 10GB | Maximum file size in bytes |
allowedFileTypes | string[] | ['/'] | Allowed MIME types |
maxConcurrentUploads | number | 5 | Maximum concurrent uploads |
disabled | boolean | false | Disable file upload |
import React from 'react';
import { useUpload } from 'react-filezone';
const BasicImageUploader: React.FC = () => {
const {
acceptedFiles,
errors,
getRootProps,
getInputProps,
removeFile
} = useUpload({
action: '/api/upload',
globalConfig: {
allowedFileTypes: ['image/*'],
maxFiles: 5,
maxFileSize: 5 * 1024 * 1024 // 5MB
},
onUploadComplete: (data) => {
console.log('Upload complete:', data);
}
});
return (
<div>
<div {...getRootProps()} className="dropzone">
<input {...getInputProps()} />
<p>Drag and drop images here, or click to select</p>
</div>
{errors.map((error, index) => (
<div key={index} className="error">{error}</div>
))}
<div className="preview-container">
{acceptedFiles.map((file) => (
<div key={file.id} className="file-preview">
{file.previewUrl && (
<img
src={file.previewUrl}
alt={file.file.name}
className="thumbnail"
/>
)}
<div className="file-info">
<p>{file.file.name}</p>
<p>Progress: {file.state.progress}%</p>
<button onClick={() => removeFile(file.id)}>Remove</button>
</div>
</div>
))}
</div>
</div>
);
};
export default BasicImageUploader;
import React, { useState } from 'react';
import { useUpload } from 'react-filezone';
const DocumentUploader: React.FC = () => {
const [userId, setUserId] = useState('');
const {
acceptedFiles,
errors,
getRootProps,
getInputProps,
removeFile,
uploadFile
} = useUpload({
action: '/api/upload-documents',
headers: {
'X-User-ID': userId,
'Authorization': `Bearer ${localStorage.getItem('token')}`
},
globalConfig: {
allowedFileTypes: [
'application/pdf',
'application/msword',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
],
maxFiles: 3,
maxFileSize: 10 * 1024 * 1024 // 10MB
},
onUploadStart: (files) => {
console.log('Starting upload for:', files.map(f => f.file.name));
},
onUploadComplete: (data) => {
alert('Documents uploaded successfully!');
},
onError: (error, file) => {
console.error(`Upload failed for ${file.file.name}:`, error);
}
});
return (
<div>
<input
type="text"
placeholder="Enter User ID"
value={userId}
onChange={(e) => setUserId(e.target.value)}
/>
<div {...getRootProps()} className="document-dropzone">
<input {...getInputProps()} />
<p>Drag and drop documents here, or click to select</p>
</div>
{errors.map((error, index) => (
<div key={index} className="error">{error}</div>
))}
<div className="document-list">
{acceptedFiles.map((file) => (
<div key={file.id} className="document-item">
<p>{file.file.name}</p>
<p>Size: {(file.file.size / 1024).toFixed(2)} KB</p>
<p>Status: {file.state.status}</p>
<p>Progress: {file.state.progress}%</p>
<div className="actions">
<button onClick={() => removeFile(file.id)}>Remove</button>
{file.state.status === 'error' && (
<button onClick={() => uploadFile(file.id)}>Retry</button>
)}
</div>
</div>
))}
</div>
</div>
);
};
export default DocumentUploader;
import React from 'react';
import { useUpload } from 'react-filezone';
const MultiTypeUploader: React.FC = () => {
const {
acceptedFiles,
errors,
getRootProps,
getInputProps,
removeFile
} = useUpload({
action: '/api/upload-multi',
globalConfig: {
mode: 'multiple',
allowedFileTypes: [
'image/*',
'video/mp4',
'application/pdf',
'text/plain'
],
maxFiles: 10,
maxFileSize: 50 * 1024 * 1024 // 50MB
},
onUploadComplete: (data) => {
console.log('Multi-type files uploaded:', data);
}
});
const renderFilePreview = (file: FileState) => {
if (file.previewUrl && file.file.type.startsWith('image/')) {
return <img src={file.previewUrl} alt={file.file.name} />;
}
if (file.videoPreviewUrl && file.file.type.startsWith('video/')) {
return <video src={file.videoPreviewUrl} controls />;
}
return <p>{file.file.name}</p>;
};
return (
<div>
<div {...getRootProps()} className="multi-dropzone">
<input {...getInputProps()} />
<p>Drag and drop multiple file types, or click to select</p>
</div>
{errors.map((error, index) => (
<div key={index} className="error">{error}</div>
))}
<div className="file-grid">
{acceptedFiles.map((file) => (
<div key={file.id} className="file-item">
{renderFilePreview(file)}
<div className="file-details">
<p>{file.file.name}</p>
<p>Type: {file.file.type}</p>
<p>Progress: {file.state.progress}%</p>
<button onClick={() => removeFile(file.id)}>Remove</button>
</div>
</div>
))}
</div>
</div>
);
};
export default MultiTypeUploader;
import React from 'react';
import { useUpload } from 'react-filezone';
const ProfilePictureUploader: React.FC = () => {
const {
acceptedFiles,
errors,
getRootProps,
getInputProps,
removeFile
} = useUpload({
action: '/api/upload-profile-pic',
globalConfig: {
mode: 'single',
allowedFileTypes: ['image/*'],
maxFileSize: 2 * 1024 * 1024, // 2MB
disabled: false // Can be dynamically set based on conditions
}
});
return (
<div>
<div {...getRootProps()} className="profile-dropzone">
<input {...getInputProps()} />
<p>Click or drag a profile picture</p>
</div>
{errors.map((error, index) => (
<div key={index} className="error">{error}</div>
))}
{acceptedFiles[0] && (
<div className="profile-preview">
<img
src={acceptedFiles[0].previewUrl}
alt="Profile"
className="profile-image"
/>
<button onClick={() => removeFile(acceptedFiles[0].id)}>
Change Picture
</button>
</div>
)}
</div>
);
};
export default ProfilePictureUploader;
useUpload(options)
action
: Upload endpoint URL (required)globalConfig
: Configuration objectheaders
: Custom headers for upload requestmetadata
: Additional metadata to attach to filesonUploadStart
: Callback when files start uploadingonUploadComplete
: Callback when upload completesonError
: Callback for upload errorsacceptedFiles
: List of processed fileserrors
: Validation and upload errorsgetRootProps()
: Props for drag and drop zonegetInputProps()
: Props for file inputremoveFile(fileId)
: Remove a file from upload queueuploadFile(fileId)
: Manually trigger file uploadrestartUpload(fileId)
: Restart a failed uploadFull TypeScript definitions are included for type safety and IDE support.
MIT License
FAQs
filezone: A Robust, Flexible React File Upload Library with Advanced Features and Seamless User Experience
The npm package react-filezone receives a total of 0 weekly downloads. As such, react-filezone popularity was classified as not popular.
We found that react-filezone demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
A RubyGems malware campaign used 60 malicious packages posing as automation tools to steal credentials from social media and marketing tool users.
Security News
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.
Research
/Security News
Two npm packages masquerading as WhatsApp developer libraries include a kill switch that deletes all files if the phone number isnβt whitelisted.