我正在使用JQuery文件上传插件,以增加将文件上传到我的网站的可能性。
上传脚本位于“index.php?cartella_id = x”之类的页面中(x是表示相册ID的数字)。
我想存储这样的文件:
server/php/files
- directory 1/
- - Image x
- - Image y
- directory 2/
- - Image z
- - Image z(2)
我基本上想为每张专辑创建一个不同的目录。
像我想要的那样存储图像并不难,因为我通过使用像这样的形式的隐藏输入来传递$ cartella_id
<input type="hidden" name="cartella_id" value="<?php echo $cartella_id; ?>">
在server / php / index.php文件中,我检查用户是否已登录,以及该专辑是否像这样存在
session_start();
if(!isset($_SESSION["username"])) {
die();
}
if(isset($_REQUEST["cartella_id"])) {
$cartella_id = (int) $_REQUEST["cartella_id"];
$sql = "SELECT * FROM cartelle WHERE cartella_id = $cartella_id";
$query = mysql_query($sql);
if($cartella = mysql_fetch_array($query)) {
$upload_dir = '/files/'.$cartella_id.'/';
} else {
die();
}
} else {
die();
}
在UploadHandler.php页面中,我编辑了'upload_dir'和'upload_url'选项。
'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/files/'.$_REQUEST["cartella_id"].'/',
'upload_url' => $this->get_full_url().'/files/'.$_REQUEST["cartella_id"].'/',
上传工作正常...问题是,如果我刷新上传页面,我看不到已经上传的文件,如脚本会在没有指定自定义路径时显示。我可以使用$ _SESSION来解决这个问题,但我不喜欢这个解决方案,删除按钮在任何情况下都不起作用。
我研究了很多PHP代码,我也搜索了很多,但我找不到适合我的解决方案。
当脚本检查现有文件时,如何发送自定义变量(我找不到那段代码)? 如何使删除按钮有效?
提前致谢
答案 0 :(得分:1)
所以我通过编辑js / main.js解决了第一个问题(即使在重新加载页面后使文件可见)。 我编辑了这个:
url: $('#fileupload').fileupload('option', 'url'),
到这个
url: ($('#fileupload').fileupload('option', 'url') + "?cartella_id="+ document.getElementById('cartella_id').value),
仍然必须使删除按钮工作。
答案 1 :(得分:0)
我有同样的问题,我解决了它启用用户目录并覆盖类UploadHandler中的方法,如下所示:
jQuery-File-Upload PHP-user-directories
我在删除网址中添加了一个额外的参数。
我的index.php:
<?php
error_reporting(E_ALL | E_STRICT);
require('UploadHandler.php');
class CustomUploadHandler extends UploadHandler {
protected function get_user_id() {
return $_REQUEST['recordId'];
}
protected function set_additional_file_properties($file) {
$file->deleteUrl = $this->options['script_url']
.$this->get_query_separator($this->options['script_url'])
.$this->get_singular_param_name()
.'='.rawurlencode($file->name)
.'&recordId='.$_REQUEST['recordId']
;
$file->deleteType = $this->options['delete_type'];
if ($file->deleteType !== 'DELETE') {
$file->deleteUrl .= '&_method=DELETE';
}
if ($this->options['access_control_allow_credentials']) {
$file->deleteWithCredentials = true;
}
}
}
$upload_handler = new CustomUploadHandler(array(
'user_dirs' => true,
));
我更改了
中的网址我的main.js:
$(function () {
'use strict';
// Initialize the jQuery File Upload widget:
$('#fileupload').fileupload({
// Uncomment the following to send cross-domain cookies:
//xhrFields: {withCredentials: true},
url: 'server/php/index.php?recordId=' + recordId,
});
// Enable iframe cross-domain access via redirect option:
$('#fileupload').fileupload(
'option',
'redirect',
window.location.href.replace(
/\/[^\/]*$/,
'/cors/result.html?%s'
)
);
// Load existing files:
$('#fileupload').addClass('fileupload-processing');
$.ajax({
// Uncomment the following to send cross-domain cookies:
//xhrFields: {withCredentials: true},
url: $('#fileupload').fileupload('option', 'url'),
dataType: 'json',
context: $('#fileupload')[0]
}).always(function () {
$(this).removeClass('fileupload-processing');
}).done(function (result) {
$(this).fileupload('option', 'done')
.call(this, $.Event('done'), {result: result});
});
});
}
我没有编辑UploadHandler.php