onescales/Upload-to-Web3
Upload to Web3 is an Apify app that uploads files to IPFS (InterPlanetary File System) using the Pinata API. Upload any type of file - images, PDFs, documents,
Bulk upload files to the decentralized web (IPFS) - backup images, PDFs, videos, and any file type to permanent, censorship-resistant storage. Uses Pinata API and IPFS pinning for fast, reliable Web3 file uploads.
apify.com/onescales/upload-to-web3?fpr=s9de8
No GitHub topics on this repo.
- JavaScript93.3%
- Dockerfile6.7%
Placement
Every place and its price$3
Nobody has bought this repo a place yet. Listing is free. Paid placement starts at $3, and $18 puts it at the top. You pay once: a place holds until another repo spends more, and then it moves down, never off. No subscription, no expiry, no refunds.
1 Review
Upload-to-Web3 provides a focused Apify Actor for downloading files from supplied URLs and uploading them to Pinata. The implementation supports public IPFS uploads and private Pinata storage, records the CID and resulting URL, and saves an individual success or error result for each file. The input schemas are well organized, and the Pinata API key is correctly marked as a secret. Sequential processing with a delay keeps the behavior predictable, while the README offers clear setup instructions and useful warnings about publishing sensitive or copyrighted material.
The main improvement should be securing the download stage. The Actor fetches arbitrary user-provided URLs without a timeout, file-size limit, protocol validation, or protection against private and link-local network addresses. In a hosted environment, this creates an SSRF risk and could expose internal resources before uploading them to Pinata. Redirects need the same validation. Large or slow responses can also exhaust memory because each file is fully loaded into a blob before upload. Adding an abort timeout, download limits, private-address blocking, safer redirect handling, and streaming where supported would make the Actor much more robust. Retry logic with bounded exponential backoff would also help with temporary network and Pinata failures.
The project would benefit from automated tests for public uploads, private signed links, failed downloads, rate limiting, and malformed input, plus a CI workflow to run them. Dependency builds are not reproducible because the repository has no lockfile and the Docker image runs npm install against a caret version. Several metadata details also need alignment: package.json declares ISC, while the repository uses a modified MIT license with mandatory attribution, and the copyright years differ. The duplicated root and .actor schemas have already begun to diverge. Keeping one authoritative set would prevent future configuration drift. Finally, the documented 30-day private-link default conflicts with the one-day default in main.js, and claims of permanent storage should explain that availability still depends on continued Pinata pinning and gateway access.
