Crop und Upload Script


Grunge

Erfahrenes Mitglied
#1
Hey Leute,

habe mir ein Script von Codecanyon gekauft, nur leider funktioniert der Upload da nicht.

Robocrop - Plugin

Das ist es. Wenn ihr auf Preview geht, steht unten wie der Autoupload initialisiert werden soll. Leider passiert da bei mir gar nix :D Nicht mal ein Fehler. Habe jetzt erstmal alles 1:1 übernommen, und die names und ids angepasst, aber keine Chance...

Code:
if(isset($_POST['picture'])){
Das hab ich angepasst, siehe hier:

Code:
<div class="crop-element" style="height: 200px; width: 200px;" data-name="size_restriction" data-crop="=200,=200" data-crop-open="true" data-upload="auto_upload.php">
                    <img/>
                    <input id="picture" name="picture" type="file"/>
                </div>
Hoffe ihr wisst weiter, denn ich verzweifle grade :D
 

Sempervivum

Erfahrenes Mitglied
#2
Ich nehme an, nur der Upload funktioniert nicht, das Laden und Ziehen des Rahmens schon?
Wird denn das PHP-Skript aufgerufen? Was liefert es zurück? (in der Doku muss doch beschrieben sein, wie man an die Antwort heran kommt.)
Hast Du es online?
 

Grunge

Erfahrenes Mitglied
#3
Genau Sempervivum alles bis auf das eigentlich uploaden funktioniert.

Ich habe keine Dokumentation, sondern nur die Seite die ich angehangen habe :D
Mehr war da leider nicht bei. Offensichtlich wird das Script nicht aufgerufen, jedenfalls bekomme ich keine Fehler in der Konsole.

In der "Doku" steht, so soll es gehen:

Code:
<?php
if(isset($_POST['picture'])){
    $picture = json_decode($_POST['picture']);
    $filteredData = substr($picture->data, strpos($picture->data, ",") + 1);
    $unencodedData = base64_decode($filteredData);

    $folder = dirname(__FILE__).'/usr_img/';
    $fileName = $picture->name.'.'.$picture->ext;

    // Save the image
    $fp = fopen($folder . $fileName, "wb");
    if (fwrite($fp, $unencodedData) === FALSE) {
        $response = [
            'status' => 'error',
            'message' => 'Error occurred'
        ];
    }else{
        $response = [
            'status' => 'success',
            'message' => 'File saved.'
        ];
    }
    fclose($fp);
    header('Content-Type: application/json');
    echo json_encode($response);
}

?>
das habe ich auch so Übernommen, nur eben die Namen geändert die wir brauchten. Aber wie gesagt, chrome versucht nichtmal drauf zu zugreifen in der Console.
ich frage mich eh, wie das gehen soll, da ja kein Formular abgesendet wurde, was etwas mit $_POST senden könnte?!
 

Sempervivum

Erfahrenes Mitglied
#4
nur eben die Namen geändert die wir brauchten.
Was hast Du denn genau geändert?
Das 'picture' hier: $_POST['picture'] scheint fest kodiert zu sein, denn im HTML in der Dokuseite findet man es nicht.
Um zu prüfen, ob das PHP-Skript überhaupt aufgerufen wird, würde ich den Inhalt von $_POST mal testweise in eine Datei schreiben.
Wenn alles nichts hilft, kannst Du den Entwickler auch um Unterstützung bitten. Ich habe selber schon Skripts von Codecanyon gekauft und das hat funktioniert.
 

Sempervivum

Erfahrenes Mitglied
#6
Die Struktur $_POST JSON-kodieren und in eine Datei schreiben:
file_put_contents('log.txt', json_encode($_POST));
Dann erkennst Du, ob das Skript aufgerufen wird und wie die Daten aussehen. Einfacher wäre es, das einfach mit echo oder var_dump in die Ausgabe zu schreiben, aber ich weiß nicht, ob Du darauf Zugriff hast.
 
Zuletzt bearbeitet:

Grunge

Erfahrenes Mitglied
#7
die txt-datei bleibt leer.... :-/ Ergo wird das Skript wohl nicht aufgerufen? Aber wieso ?

Gibt wohl Copyright Probleme wenn ich dir die js-Datei vom Skript anhänge?
Ich weiß nicht was da los ist :(
 

basti1012

Erfahrenes Mitglied
#11
Verstehe nicht: Das ist original die Demoseite. Und im Javascript steht:
D. h. damit kann der Upload nicht funktionieren.
Wenn er das Script doch gekauft hat müßte er doch die funktionierende Versionen bekommen haben. Hat er die überhaupt genommen , oder die aus der Demo ? Wenn er die Demo Versionen genommen hat dann hast du ja recht das es nicht gehen kann.

Er sollte vieleicht mal die Javascripte posten die er gerade benutzt
 

Sempervivum

Erfahrenes Mitglied
#13
Stehe ratlos davor. Bedenke, dass, wenn man deinen Link aufruft, nur die index.html angezeigt wird und man nicht das Verzeichnis einsehen kann, nur den Quelltext der index.html und die Dateien, die dadurch eingebunden werden. Du schreibst doch, Du hast Namen angepasst, dann muss es doch auch eine HTML-Datei geben, die Du selber erzeugt hast und wo das richtige Skript eingebunden ist?
 

basti1012

Erfahrenes Mitglied
#14
Ich glaube das versteht keiner.
Wenn man doch so ein Script kauft bekommst man doch eine Email oder ein Link zugeschickt wo die originalen Scripte und Datein drinne sind oder nicht ?
Die müßte mal mal sehen. Welche Datein hast du den sonst genommen nach den kauf ?
Kannst du das nicht mal auf dein Server hochladen und online stellen ? Oder habe ich irgendwo den Link hier übersehen ?
 

Grunge

Erfahrenes Mitglied
#15
Ich weiß nicht ob wir aneinander vorbei reden?
Ich habe diese Index Datei dabei und eben ne JS-Datei und ne Css Datei und das war es im Prinzip schon (jQuery und Bootstrap ist noch bei)

Und alles was ich habe, habe ich hochgeladen!

EDIT:
Ich habe mir jetzt folgendes überlegt. Vielleicht nicht die beste Lösung:

Code:
<input id="file" type="file" onchange="return change();"/>
Code:
function change(){
        var xhr = new XMLHttpRequest();
      
        xhr.open('POST', 'auto_upload.php', true);
        var files = document.getElementById('file').files;
        var data = new FormData();
        for(var i = 0; i < files.length; i++) data.append('file' + i, files[i]);
        xhr.send(data);
   
    }
Problem hierbei nur, der ruft das Script auf, bevor das neue Bild geladen ist...Somit kann er ja nur ein leeres hochladen. Was er im Moment nicht mach, da die PHP noch nicht fertig ist...
 
Zuletzt bearbeitet:

EuroCent

Erfahrenes Mitglied
#16
@Grunge
Dann wird dir nichts über bleiben, als Dich bei Ihm zu melden.
Unter Umständen ist der Link zum DL einfach nur falsch oder fehlerhaft. :)

Wie groß war die ZIP/Rar Datei die du bekommen hast?
Laut Google sollte sie zwischen 12,3 - 14,4MB groß sein. :)
 

Sempervivum

Erfahrenes Mitglied
#17
Hallo Grunge, zu deinem Edit: Du musst das Hochladen in der Funktion apply einbauen, die wird aufgerufen, wenn man den Button mit dem Häkchen drückt:
Javascript:
    }, RoboCrop.prototype.apply = function (e) {
        $("html,body,#crop-editor").css("overflow", "initial"), this.busy(!0)
        var t = $(this.imageElement).data("ext")
        t = this.validExtension(t ? t : "png")
        var i = void 0 === e ? this.getImageBase64(t) : e,
            o = i.substring(11, i.indexOf(";base64"))

        function dataURLtoBlob(dataurl) {
            var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
                bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new Blob([u8arr], { type: mime });
        }
        var theblob = dataURLtoBlob(i);
        var fd = new FormData();
        fd.append('data', theblob);
        $.ajax({
            method: 'POST',
            url: 'saveblobimg.php',
            data: fd,
            processData: false,
            contentType: false,
            success: function (output) {
                console.log(output);
                // $("#output").html(output);
            }
        });


        t = "png" === o ? o : $(this.imageElement).data("ext"), $(this.imageElement).find("img").first().attr("src", i)
        var r = $(this.imageElement).data("name")
        r = void 0 === r ? "crop_image" : r, $(this.imageElement).find("input[type=hidden]").length || $(this.imageElement).append('<input type="hidden" name="' + r + '" value=""/>'), $(this.imageElement).find("input[type=hidden]").val(i)
        var a = ($(this.imageElement).data("upload"), this.getImageSize(), "data:image/png;base64,")
        Math.round(3 * (i.length - a.length) / 4)
        this.clearImage(), this.busy(!1), $(this.imageElement).addClass("not-empty")
    }
saveblobimb.php:
PHP:
<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');

var_dump($_FILES);
$file = 'test.png';
move_uploaded_file ($_FILES['data']['tmp_name'], $file);
?>
 

Grunge

Erfahrenes Mitglied
#18
Also der Ajax/JS Teil scheint zu funktionieren, jedenfalls gibt es keinen Fehler! Auch die Php Datei wird aufgerufen (zeigt mir chromes Console jedenfalls)
ABER: Die Php- Datei ist leer? also er gibt kein var_dump aus, noch ein einfaches echo

Kann es sein, dass gar kein $_POST ankommt? Wird ja kein Formular mit der Methode post übertragen?
muss das ganze in ein Formular?