ReactJS: сохранить данные Base64 в PNG-файле на сервере (для совместного использования на сайтах социальных сетей) [дублировать]

[D5] Да. Вам нужно использовать Assembly.LoadFrom , чтобы загрузить сборку в память, затем вы можете использовать Activator.CreateInstance , чтобы создать экземпляр вашего предпочтительного типа. Сначала вам нужно посмотреть тип, используя отражение. Вот простой пример:

  Assembly assembly = Assembly.LoadFrom («MyNice.dll»);  Тип type = assembly.GetType («MyType»);  object instanceOfMyType = Activator.CreateInstance (type);   

Обновить

Когда у вас есть имя файла сборки и имя типа, вы можете использовать Activator.CreateInstance (assemblyName, typeName) для попросите разрешение типа .NET разрешить это в тип. Вы можете обернуть это с помощью try / catch, чтобы в случае сбоя вы могли выполнить поиск каталогов, где вы можете специально хранить дополнительные сборки, которые иначе не могли бы быть найдены. Это будет использовать предыдущий метод в этой точке.

112
задан JasonMArcher 25 June 2014 в 17:52
поделиться

6 ответов

Проблема заключается в том, что data:image/png;base64, включен в кодированное содержимое. Это приведет к недопустимым данным изображения, когда функция base64 его декодирует. Удалите эти данные в функции перед декодированием строки, например.

function base64_to_jpeg($base64_string, $output_file) {
    // open the output file for writing
    $ifp = fopen( $output_file, 'wb' ); 

    // split the string on commas
    // $data[ 0 ] == "data:image/png;base64"
    // $data[ 1 ] == <actual base64 string>
    $data = explode( ',', $base64_string );

    // we could add validation here with ensuring count( $data ) > 1
    fwrite( $ifp, base64_decode( $data[ 1 ] ) );

    // clean up the file resource
    fclose( $ifp ); 

    return $output_file; 
}
205
ответ дан Austin Brunkhorst 15 August 2018 в 17:05
поделиться
  • 1
    У меня очень умное решение $ filename_path = md5 (time (). uniqid ()). & quot; .jpg "; $ Декодируется = base64_decode ($ base64_string_img); file_put_contents (& Quot; добавление / & Quot;. $ filename_path, $ декодируются); – Rizwan Gill 6 February 2015 в 13:09
  • 2
    У меня были только необработанные данные base64 без префикса или около того. поэтому мне пришлось изменить $ data [1] на $ data [0]. – rcpfuchs 27 April 2016 в 06:05
  • 3
    @rcpfuchs, если у вас есть только исходный base64, то в чем необходимость использования $ data, используйте его прямо, как написано в заданном вопросе – Anant 2 February 2017 в 17:35

Вам нужно удалить часть, которая говорит data:image/png;base64, в начале данных изображения. После этого будут получены фактические данные base64.

Просто разделите все до и включите base64, (перед вызовом base64_decode() по данным), и все будет в порядке.

39
ответ дан aaaaaa123456789 15 August 2018 в 17:05
поделиться
$datetime = date("Y-m-d h:i:s");
$timestamp = strtotime($datetime);
$image = $_POST['image'];
$imgdata = base64_decode($image);
$f = finfo_open();
$mime_type = finfo_buffer($f, $imgdata, FILEINFO_MIME_TYPE);
$temp=explode('/',$mime_type);
$path = "uploads/$timestamp.$temp[1]";
file_put_contents($path,base64_decode($image));
echo "Successfully Uploaded->>> $timestamp.$temp[1]";

Этого будет достаточно для обработки изображений. Особая благодарность г-ну. Dev Karan Sharma

-4
ответ дан Manish 15 August 2018 в 17:05
поделиться

, возможно, это

function save_base64_image($base64_image_string, $output_file_without_extension, $path_with_end_slash="" ) {
    //usage:  if( substr( $img_src, 0, 5 ) === "data:" ) {  $filename=save_base64_image($base64_image_string, $output_file_without_extentnion, getcwd() . "/application/assets/pins/$user_id/"); }      
    //
    //data is like:    data:image/png;base64,asdfasdfasdf
    $splited = explode(',', substr( $base64_image_string , 5 ) , 2);
    $mime=$splited[0];
    $data=$splited[1];

    $mime_split_without_base64=explode(';', $mime,2);
    $mime_split=explode('/', $mime_split_without_base64[0],2);
    if(count($mime_split)==2)
    {
        $extension=$mime_split[1];
        if($extension=='jpeg')$extension='jpg';
        //if($extension=='javascript')$extension='js';
        //if($extension=='text')$extension='txt';
        $output_file_with_extension=$output_file_without_extension.'.'.$extension;
    }
    file_put_contents( $path_with_end_slash . $output_file_with_extension, base64_decode($data) );
    return $output_file_with_extension;
}
8
ответ дан NazS2 15 August 2018 в 17:05
поделиться
if($_SERVER['REQUEST_METHOD']=='POST'){
$image_no="5";//or Anything You Need
$image = $_POST['image'];
$path = "uploads/$image_no.png";

file_put_contents($path,base64_decode($image));
echo "Successfully Uploaded";
}
2
ответ дан Sthish Visar 15 August 2018 в 17:05
поделиться

простой способ, которым я пользуюсь:

file_put_contents($output_file, file_get_contents($base64_string));
0
ответ дан Trịnh Trọng Trần Bá 15 August 2018 в 17:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: