Pregunta

Estoy tratando de implementar un niceit con el complemento Nicupload, pero cuando selecciono un archivo para cargar, dice "Error al cargar la imagen", y la respuesta del servidor dice "ID de carga no válida".

Este es el código que llama al script e inicializa:

<script src="http://js.nicedit.com/nicEdit-latest.js" type="text/javascript"></script>
<script type="text/javascript">//<![CDATA[
bkLib.onDomLoaded(function() {
new nicEditor({uploadURI : '../../nicedit/nicUpload.php'}).panelInstance('area1');
});
//]]>
</script>

La ruta a nicupload.php es correcta, y el código es el que se puede encontrar en la documentación: http://nicedit.com/src/nicupload/nicupload.js

Hice los cambios de carga de carpetas, y configurar los permisos de escritura.Según la documentación ( http://wiki.nicedit.com/w/page/515 / Configuración% 20Options ), eso es todo, pero sigo recibiendo errores.¿Alguna idea?

¿Fue útil?

Solución

Puede pasar manualmente una identificación a su script: e.g nicupload.php? id= intropicheader y se convertirá en intropicheader.jpg (o extensión apropiada) en la carpeta de imágenes que definió.

Sin embargo, he notado que este script está roto y no puede acceder a la opción de configuración Uploakuri si se especifica directamente en Nicedit.js durante el NiceditorAdvancedButton.Extend ({. Esto provoca el acceso a un recurso "desconocido" relativamente senderoso, lo que provoca un error .

La documentación implica lo contrario y el hecho de que el Nicuri se especificó aquí para imgur.com (tal vez como predeterminado) me dio la impresión, también podría agregar una referencia de UploaRiURI al script Nicupload.php en un solo lugar en lugar de en Cada editor de instancias.

actualización

Esto funciona si lo pasa durante la instanciación, lo que supongo que permite una fácil población de identificación dinámica.

Desafortunadamente, el Nicupload.php está lleno de errores y su salida no es JSON. El editor espera analizar JSON y encuentra una etiqueta y errores de script con un token inesperado "<".

Hay una serie de otros errores que intentaré identificar:

en nicedit.js

  1. a a.aPEND ("imagen") debe ser de infusión A.Alpend ("Nicimage")
  2. Esto.onuploaded (d.upload) debe convertirse en esto. Aloaded (D)
  3. Esto.onuploaded (d) debe moverse dentro del bloque de prueba después de var d= json.parse (c.responseText) para solucionar problemas de alcance variable
  4. b.image.width necesita convertirse en B.width

    en nicupload.php

    1. La salida JSON no se forma correctamente, comenta la salida y la salida HTML, solo JSON_ENCODE ($ estado).
    2. La salida JSON necesita para devolver un par de claves / valor llamado enlaces en lugar de url, aunque cambie de nombre del var d= b.links a var d= b.url en nicedit.js también sería suficiente como una solución.

      El código PHP y JavaScript deja mucho que desear, obtengo muchos errores regularmente y me he estado arreglando yo mismo.

Otros consejos

Después de buscar una solución mucho tiempo (muchos puestos sin solución real), ahora fijé el código yo mismo.Ahora puedo cargar una imagen a mi propio servidor.Gracias a Firebug y Eclipse; -)

El problema principal es que el Nicupload.php es antiguo y no funciona con la función actual de carga por correo electrónico.

Falta es el manejo de errores, no dude en agregar esto ...

Agregue el Niceditor a su archivo PHP y configúrelo para usar el Nicedit.php:

new nicEditor({iconsPath : 'pics/nicEditorIcons.gif', uploadURI : 'script/nicUpload.php'}

Descargar el nicedit.js sin comprimir y cambiar las siguientes líneas en nicedit.js:

uploadFile : function() {
var file = this.fileInput.files[0];
if (!file || !file.type.match(/image.*/)) {
  this.onError("Only image files can be uploaded");
  return;
}
this.fileInput.setStyle({ display: 'none' });
this.setProgress(0);

var fd = new FormData(); 
fd.append("image", file);
fd.append("key", "b7ea18a4ecbda8e92203fa4968d10660");
var xhr = new XMLHttpRequest();
xhr.open("POST", this.ne.options.uploadURI || this.nicURI);

xhr.onload = function() {
  try {
    var res = JSON.parse(xhr.responseText);
  } catch(e) {
    return this.onError();
  }
  //this.onUploaded(res.upload); // CHANGE HERE
  this.onUploaded(res);
}.closure(this);
xhr.onerror = this.onError.closure(this);
xhr.upload.onprogress = function(e) {
  this.setProgress(e.loaded / e.total);
}.closure(this);
xhr.send(fd);

},

onUploaded : function(options) {
this.removePane();
//var src = options.links.original; // CHANGE HERE
var src = options['url'];
if(!this.im) {
  this.ne.selectedInstance.restoreRng();
  //var tmp = 'javascript:nicImTemp();';
  this.ne.nicCommand("insertImage", src);
  this.im = this.findElm('IMG','src', src);
}
var w = parseInt(this.ne.selectedInstance.elm.getStyle('width'));
if(this.im) {
  this.im.setAttributes({
    src : src,
    width : (w && options.image.width) ? Math.min(w, options.image.width) : ''
  });
}

}

Cambie el Nicupload.php como este

<?php
/* NicEdit - Micro Inline WYSIWYG
 * Copyright 2007-2009 Brian Kirchoff
 *
 * NicEdit is distributed under the terms of the MIT license
 * For more information visit http://nicedit.com/
 * Do not remove this copyright message
 *
 * nicUpload Reciever Script PHP Edition
 * @description: Save images uploaded for a users computer to a directory, and
 * return the URL of the image to the client for use in nicEdit
 * @author: Brian Kirchoff <briankircho@gmail.com>
 * @sponsored by: DotConcepts (http://www.dotconcepts.net)
 * @version: 0.9.0
 */

/* 
* @author: Christoph Pahre
* @version: 0.1
* @description: different modification, so that this php file is working with the newest nicEdit.js (needs also modification - @see) 
* @see http://stackoverflow.com/questions/11677128/nicupload-says-invalid-upload-id-cant-make-it-works
*/

define('NICUPLOAD_PATH', '../images/uploadedImages'); // Set the path (relative or absolute) to
                                      // the directory to save image files

define('NICUPLOAD_URI', '../images/uploadedImages');   // Set the URL (relative or absolute) to
                                      // the directory defined above

$nicupload_allowed_extensions = array('jpg','jpeg','png','gif','bmp');

if(!function_exists('json_encode')) {
    die('{"error" : "Image upload host does not have the required dependicies (json_encode/decode)"}');
}

if($_SERVER['REQUEST_METHOD']=='POST') { // Upload is complete

    $file = $_FILES['image'];
    $image = $file['tmp_name'];
    $id = $file['name'];

    $max_upload_size = ini_max_upload_size();
    if(!$file) {
        nicupload_error('Must be less than '.bytes_to_readable($max_upload_size));
    }

    $ext = strtolower(substr(strrchr($file['name'], '.'), 1));
    @$size = getimagesize($image);
    if(!$size || !in_array($ext, $nicupload_allowed_extensions)) {
        nicupload_error('Invalid image file, must be a valid image less than '.bytes_to_readable($max_upload_size));
    }

    $filename = $id;
    $path = NICUPLOAD_PATH.'/'.$filename;

    if(!move_uploaded_file($image, $path)) {
        nicupload_error('Server error, failed to move file');
    }

    $status = array();
    $status['done'] = 1;
    $status['width'] = $size[0];
    $rp = realpath($path);
    $status['url'] =  NICUPLOAD_URI ."/".$id;


    nicupload_output($status, false);
    exit;
} 

// UTILITY FUNCTIONS

function nicupload_error($msg) {
    echo nicupload_output(array('error' => $msg)); 
}

function nicupload_output($status, $showLoadingMsg = false) {
    $script = json_encode($status);
    $script = str_replace("\\/", '/', $script);
    echo $script;

    exit;
}

function ini_max_upload_size() {
    $post_size = ini_get('post_max_size');
    $upload_size = ini_get('upload_max_filesize');
    if(!$post_size) $post_size = '8M';
    if(!$upload_size) $upload_size = '2M';

    return min( ini_bytes_from_string($post_size), ini_bytes_from_string($upload_size) );
}

function ini_bytes_from_string($val) {
    $val = trim($val);
    $last = strtolower($val[strlen($val)-1]);
    switch($last) {
        // The 'G' modifier is available since PHP 5.1.0
        case 'g':
            $val *= 1024;
        case 'm':
            $val *= 1024;
        case 'k':
            $val *= 1024;
    }
    return $val;
}

function bytes_to_readable( $bytes ) {
    if ($bytes<=0)
        return '0 Byte';

    $convention=1000; //[1000->10^x|1024->2^x]
    $s=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB');
    $e=floor(log($bytes,$convention));
    return round($bytes/pow($convention,$e),2).' '.$s[$e];
}

?>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top