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-handler-almant

v2.0.6

Published

A simple and efficient npm package for handling image uploads in Node.js applications. This package provides functions to save, update, and delete images. It allows you to save images in your local project and returns the path for storing in your database

Downloads

147

Readme

Image Handler

A simple and efficient npm package for handling image uploads in Node.js applications. This package provides functions to save, update, and delete images. It allows you to save images in your local project and returns the path for storing in your database, making it easy to fetch them later. Additionally, it specifically handles images by allowing you to specify the image URL. This package utilizes three Node.js modules to manage image storage.

// This imports the built-in Node.js fs (File System) module, which provides an API for interacting with the file system. You can read, write, and manipulate files and directories using this module.
import fs from 'fs';

// This imports the built-in Node.js path module, which provides utilities for working with file and directory paths.
import path from 'path';

This imports the v4 function from the uuid package, which is used to generate unique identifiers (UUIDs). These identifiers are often used to create unique file names or IDs in databases, ensuring that each entity is distinct.
import { v4 as uuidv4 } from 'uuid';

Installation

You can install the package via npm:

npm install image-handler-almant

//import
import { saveUrlImage,deleteImage,deleteImage,updateImage} from "image-handler-almant";

Upload a Image

This it take a file image and return the string path

export async function saveImage(image: File): Promise<string> {
  // Ensure the uploads directory exists
  const uploadsDir = path.join(process.cwd(), 'public', 'images');
  if (!fs.existsSync(uploadsDir)) {
    fs.mkdirSync(uploadsDir, { recursive: true });
  }

  // Generate a unique file name
  const ext = path.extname(image.name);
  const filename = `${uuidv4()}${ext}`;

  // Create the full path to save the image
  const filePath = path.join(uploadsDir, filename);

  // Convert the image Blob into a Buffer
  const arrayBuffer = await image.arrayBuffer();
  const buffer = Buffer.from(arrayBuffer);

  // Save the file to the public/uploads directory
  fs.writeFileSync(filePath, buffer);

  // Return the file path relative to the public directory
  return `/images/${filename}`;
}

It take the url post

export async function saveFacebookImage(image: any): Promise<string> {
  try {
    // Ensure the uploads directory exists
    const uploadsDir = path.join(process.cwd(), 'public', 'images');
  if (!fs.existsSync(uploadsDir)) {
    fs.mkdirSync(uploadsDir, { recursive: true });
  }
    // Generate a unique file name (you may need to specify the extension)
    const ext = '.jpg'; // Change this based on the actual image type if needed
    const filename = `${uuidv4()}${ext}`;

    // Create the full path to save the image
    const filePath = path.join(uploadsDir, filename);

    // Convert the ArrayBuffer into a Buffer
    const arrayBuffer = await image.arrayBuffer();
    const buffer = Buffer.from(arrayBuffer); // Directly convert the ArrayBuffer to Buffer

    // Save the file to the public/uploads directory
   fs.writeFileSync(filePath, buffer);

    // Return the file path relative to the public directory
    return `/images/${filename}`;
  } catch (error) {
    console.error('Error saving image:', error);
    throw error;
  }
}

Required the filename

export async function deleteImage(fileName: string): Promise<void> {
  if (fs.existsSync(fileName)) {
    try {
      fs.unlinkSync(fileName);
    } catch (error) {
      console.log(error);
    }
  }
}

When we update our image its good to delete the previously

export async function updateImage(image: File, oldPath: string): Promise<string> {
  // Ensure the uploads directory exists
  const uploadsDir = path.join(process.cwd(), 'public', 'images');
  if (!fs.existsSync(uploadsDir)) {
    fs.mkdirSync(uploadsDir, { recursive: true });
  }

  // Check if the old path exists
  const oldPathImage = path.join(process.cwd(), oldPath);
  if (fs.existsSync(oldPathImage)) {
    try {
      fs.unlinkSync(oldPathImage);
    } catch (error) {
      console.error(error);
    }
  }

  // Store a new one
  const ext = path.extname(image.name);
  const filename = `${uuidv4()}${ext}`;

  // Create the full path to save the image
  const filePath = path.join(uploadsDir, filename);

  // Convert the image Blob into a Buffer
  const arrayBuffer = await image.arrayBuffer();
  const buffer = Buffer.from(arrayBuffer);

  // Save the file to the public/uploads directory
  fs.writeFileSync(filePath, buffer);

  // Return the file path relative to the public directory
  return `/images/${filename}`;
}