Jquery fileupload: загрузить файл в новую папку с измененным именем в Stack Overflow

Привет всем: у меня есть еще один вызов:

Я использую JQuery Fileuploader для PHP от Blueimp: https://github.com/blueimp/jQuery-File-Upload

Я изменяю код для реализации загрузчика в моей сети.
Я могу использовать его правильно, но документация плоха в отношении определенных дополнений или модов:

Я пытаюсь изменить файл UploaderHandler.php, чтобы создать папку с именем пользователя (уникальным), но я не знаю, ГДЕ поставить функцию mkdir () …

И хотите загрузить файлы, меняющие имена на 1.txt, 2.pdf, 3.doc … и т. Д. И т. Д. И т. Д.

Любая помощь?

PD: я думаю о 3 решениях:

1) поместите мою функцию mkdir () в login.php, и когда пользователь входит в систему, он проверяет, что папка существует и она пуста … и каждый раз, когда он перезагружает определенные файлы .php. Думаю, не лучшее решение.

2) поместите функцию mkdir () в get_upload_path из uploadHandler.php

3) поместите мою функцию rename () в get_unique_filename из uploadHandler.php

РЕДАКТИРОВАТЬ: я только что попробовал 2) вариант: я изменил UploadHandler.php.

Это работает, создайте папку с именем пользователя и поместите загруженный файл в папку. Но в AJAX я не получил ответ, и не создавайте строку ответа:

UploadHandler.php:

function __construct($options = null, $initialize = true, $error_messages = null){
ob_start();
include('../conexion.php');
include('../session/session.php');

$url_subida = dirname($this->get_server_var('SCRIPT_FILENAME')).'/'.$usuario.'/';
if(!is_dir($url_subida)){
mkdir($url_subida, 0777);
}
else{
error_log($url_subida);
}

$this->options = array(
'script_url' => $this->get_full_url().'/',
'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/'.$usuario.'/',
'upload_url' => $this->get_full_url().'/'.$usuario.'/',
[...]

Ответ в AJAX в HTML / php:

$(function(){
$('#fileupload').fileupload({
dataType: 'json',
done: function (e, data){
$.each(data.result.files, function (index, file) {
numarch++;
$('<div id="archivo_'+numarch+'" />').appendTo('#files');
if (file.error){
$('<img src="img/x.png" title="Error" alt="Error"/>').appendTo('#archivo_'+numarch);
$('<p class="text-danger"/>').text(file.error).appendTo('#archivo_'+numarch);
}
else{
var newFileDiv = $("<img title='Archivo subido OK' alt='Archivo subido OK'/>
<p>"+file.name+"</p>
<div id='borrarDiv' name='borrarDiv' class='btn btn-danger delete' onclick= borrar_archivo ('archivo_"+numarch+"','"+file.deleteUrl+"','"+file.deleteType+"','"+numarch+"')>
<i class='glyphicon glyphicon-trash'></i>
<span>Borrar</span></div>");
$('#archivo_'+numarch).append(newFileDiv);
}
});
},
progressall: function (e, data){
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .progress-bar').html(progress + '%');
$('#progress .progress-bar').css('width',progress + '%');
}
});
});

Не могли бы вы помочь мне получить ответ?

1

Решение

Хорошо, задание выполнено:

Во-первых: как загрузить файлы на пользовательский URL-адрес, измененный именем пользователя:

В реализации jQuery Fileupload для BlueImp вы должны использовать 2 файла для управления загрузками: index.php и uploadhandler.php.

Первый создает объект:

error_reporting(E_ALL | E_STRICT);
require('UploadHandler.php');

$upload_handler = new UploadHandler();

Вы должны изменить это на:

ob_start(); //get session

//include files to operate with database and session
include("../conection.php");
include("../session/session.php");

error_reporting(E_ALL | E_STRICT);
require('UploadHandler.php');

//add var $options. It is an array, you can see it in uploadhandler.php, in the constructor
//you modify the data: the upload_dir and the upload_url
$options = array('upload_dir'=>$usuario.'/', 'upload_url'=>$usuario.'/');
//then add the array to the constructor declaration
$upload_handler = new UploadHandler($options);

С помощью этой модификации вы можете отправить конструктору переменную путь загрузки.

Я надеюсь, что это поможет вам всем.

РЕДАКТИРОВАТЬ: ПРОБЛЕМА С БЕЛЫМИ ПРОСТРАНСТВАМИ

Чтобы бороться с пробелами в имени файла, вы должны изменить эту функцию:

protected function get_unique_filename($file_path, $name, $size, $type, $error, $index, $content_range){
while(is_dir($this->get_upload_path($name))){
$name = $this->upcount_name($name);
}
// Keep an existing filename if this is part of a chunked upload:
$uploaded_bytes = $this->fix_integer_overflow(intval($content_range[1]));
while(is_file($this->get_upload_path($name))){
if ($uploaded_bytes === $this->get_file_size($this->get_upload_path($name))){
break;
}
$name = $this->upcount_name($name);
}

//converts the white spaces in _
$name= str_replace(" ", "_", $name);

return $name;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]