Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.10.2022, 18:34
Новичок на форуме
Отправить личное сообщение для Mukzer Посмотреть профиль Найти все сообщения от Mukzer
 
Регистрация: 06.10.2022
Сообщений: 1

Почему не работает создание файла из blob?
Подскажите пожалуйста где проблема, уже понятия не имею почему не работает. Должно работать так что обрезается фото, и отправляется на сервер как файл. Для этого я создавал canvas, из него blob и уже из него файл, но получается всё не то. (Back-end ожидает от меня только файл, base64 отправить ему я не могу....)

вот код
https://codesandbox.io/s/vibrant-haw...seCropImage.ts
import { useCallback, useEffect, useRef, useState, ChangeEvent } from "react";
import { Crop } from "react-image-crop";

export const useCropImage = (
  width: number,
  height: number,
  minWidth = 250,
  minHeight = 250
) => {
  const imgRef = useRef<any>(null);
  const [crop, setCrop] = useState<Crop>({
    unit: "px",
    x: 130,
    y: 36,
    width: width < minWidth ? minWidth : width,
    height: height < minHeight ? minHeight : height
  });
  const [image, setImage] = useState<any>();
  const [imageSrc, setImageSrc] = useState<any>();
  const [nameFile, setNameFile] = useState("");

  const onSelectFile = (evt: ChangeEvent<HTMLInputElement>) => {
    if (evt.target.files && evt.target.files.length > 0) {
      const reader = new FileReader();
      reader.readAsDataURL(evt.target.files[0]);
      setNameFile(evt.target.files[0].name.replace(" ", ""));
      reader.addEventListener("load", () => setImageSrc(reader.result));
    }
  };

  const onLoad = useCallback((evt: any) => setImage(evt.target), []);

  function blobToFile(theBlob: Blob, fileName: string) {
    return new File([theBlob], fileName, {
      lastModified: new Date().getTime(),
      type: theBlob.type
    });
  }

  const cropImageNow = () => {
    if (!image) {
      return;
    }

    const canvas = document.createElement("canvas");
    const scaleX = image.naturalWidth / image.width;
    const scaleY = image.naturalHeight / image.height;
    canvas.width = crop.width;
    canvas.height = crop.height;
    const ctx = canvas.getContext("2d");

    if (ctx) {
      const pixelRatio = window.devicePixelRatio;
      canvas.width = crop.width * pixelRatio;
      canvas.height = crop.height * pixelRatio;
      ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
      ctx.imageSmoothingQuality = "high";

      ctx.drawImage(
        image,
        crop.x * scaleX,
        crop.y * scaleY,
        crop.width * scaleX,
        crop.height * scaleY,
        0,
        0,
        crop.width,
        crop.height
      );
    }

    canvas.toBlob((blob) => {
      console.log(blob);
      const formData = new FormData();
      formData.append("image", blob, "image.png");
      console.log([...formData.entries()]);
    }, "image/png");
  };

  return {
    crop,
    imgRef,
    onLoad,
    setCrop,
    imageSrc,
    nameFile,
    minWidth,
    minHeight,
    setImageSrc,
    cropImageNow,
    onSelectFile
  };
};


Вот такое сейчас получаю (фото)
https://ibb.co/VDzH0w9

photo1665070380.jpeg
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает? Rora Общие вопросы Javascript 7 10.05.2017 10:09
Почему не работает подключенный скрипт?? ivt22 Элементы интерфейса 1 04.01.2016 10:59
Помогите разобраться почему не работает скрипт корректно Batyabest AJAX и COMET 1 09.07.2015 05:08
Не пойму почему не работает код? Mukhtar Events/DOM/Window 4 29.04.2013 00:01
Не могу понять, почему не работает автокомпил в IE 8 gargon2008 jQuery 0 07.06.2011 11:31