npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

image-uploader

v2.0.2

Published

JavaScript Image Uploader Library for use with Amazon S3

Downloads

70

Readme

Image Uploader

NPM version NPM downloads License

An open source plugin for uploading image files to an S3 bucket.

  • Demo: https://sbolel.github.io/image-uploader/
  • Repository: https://github.com/sbolel/image-uploader

Getting Started

Install image-uploader via yarn:

yarn add image-uploader

Or via npm:

npm install --save image-uploader

Or via Bower:

bower install --save sbolel/s3-image-uploader

Include image-upload.bundle.min.js in your app:

<script src="lib/image-upload.min.js"></script>

Or with the Amazon SDK included:

<script src="lib/image-upload.bundle.min.js"></script>

Usage

const imageUploader = new ImageUploader();

imageUploader.push(file, (data) => {
  console.log('File uploaded Successfully', file, data);
});

Configuring AWS S3

You are welcome to use the public S3 bucket that is preconfigured in src/image-upload.js. This public bucket will only accept files with JPG and PNG extensions up to 10MB in size. The files are automatically deleted after 24 hours.

To use your own Amazon S3 bucket, change the information in src/image-upload.js and uglify by running grunt in Terminal from the project directory.

Setting up an AWS S3 Bucket for use with Ionic Image Upload

Below is a summary of Uploading To S3 With AngularJS by Cheyne Wallace

To setup an S3 bucket for use with the Ionic Image Upload plugin, we need to:

  • Configure an AWS S3 bucket by creating a "public" IAM account:
    • The IAM user will only have permission to PUT files into a particular AWS Bucket and nothing else.
    • This users API key will be public -- anyone will be able to upload to your bucket if they use this key.
  • Configure the bucket to expire all objects within 24 hours.
    • Even if someone uploads a 10 Gigabyte file, it will eventually be deleted.
  • Configure CORS to prevent uploading of content from anywhere other than your own domain.
  • Create a server to transfer uploaded files from the temporary bucket to a permanent bucket:
    • When a new file is uploaded to this temporary bucket from the app;
    • App will send the details of the file to the server;
    • Server will perform any necessary transformations, encryption, resizing, or processing, and,
    • Server will move the file into a permanent bucket.

1. Create the IAM User

  1. Open AWS console to the "Security Credentials" section.
  2. Create a new user and call it something like "app_public".
  3. Make sure you download the key information when it is presented, this is what we’ll be feeding into our app later to upload with.
  4. Under the permissions section, click "attach a new policy", then select the policy generator.
  5. Select Amazon S3 as the service and only select the PutObject action from the drop down list.
  6. The ARN is an Amazon Resource Name. This will look like arn:aws:s3:::your_bucket_name
  7. Click "add statement", then save and apply policy.

Now your user has write-only access to the bucket.

Your policy is going to look something like this;

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt126637111000",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::your_bucket_name"
      ]
    }
  ]
}

2. Configure CORS And Expiry On The Bucket

Go to the AWS S3 console, click your bucket, then click the Properties button. You'll use the "Add CORS Configuration" button to configure your bucket to only allow PUT requests from particular origins.

You can use the following sample config -- edit to reflect your development, production and staging environments.

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>http://localhost:3000</AllowedOrigin>
        <AllowedOrigin>https://www.yourdomain.com</AllowedOrigin>
        <AllowedOrigin>http://staging.yourdomain.com</AllowedOrigin>
        <AllowedMethod>PUT</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
        <ExposeHeader>x-amz-request-id</ExposeHeader>
        <ExposeHeader>x-amz-id-2</ExposeHeader>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

Expire the objects in this bucket after some short period to prevent malicious use. Your server side code should handle moving and deleting valid files so you can assume those that are left after 24 hours are not meant to be there.

  1. From your S3 console, view a bucket, and then click Properties.
  2. Expand the "Lifecycle Rules" section and follow the prompts.
  3. Set the action to "Permanently Delete Only" and set it for 1 day -- this will delete any objects in the bucket that are older than 1 day permanently.

Now, you're ready to use this bucket in your Ionic Image Upload app!