我遇到了jQuery-File-Upload的问题。我将它与PHP代码一起使用,我会根据记录的用户将文件上传到不同的文件夹中。 例如,如果记录的用户有代码' abcd',我会在&upload; 2017 / abcd /'上传文件。
要做到这一点,我写了这段代码:
$(function () {
'use strict';
// Change this to the location of your server-side upload handler:
var url = 'upload/<?= $year?>/<?= $logged_user?>';
$('#fileupload').fileupload({
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
upload_dir: url,
upload_url: url,
url: url,
dataType: 'json',
done: function (e, data) {
$.each(data.result.files, function (index, file) {
$('<p/>').text(file.name).appendTo('#files');
});
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .progress-bar').css(
'width',
progress + '%'
);
}
}).prop('disabled', !$.support.fileInput)
.parent().addClass($.support.fileInput ? undefined : 'disabled');
});
文件夹存在,并且具有正确的权限(0777),但是当我尝试上传时,出现此错误消息:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /upload/2017/abcd/ on this server.<br />
</p>
</body></html>
答案 0 :(得分:0)
网址
包含发送请求的URL的字符串。
这应该是一个上传处理程序,例如PHP脚本,它将执行验证,命名和移动文件的工作。您在上面显示的代码甚至包括一个评论说同样的事情:
// Change this to the location of your server-side upload handler:
但看起来您正在使用url指定目标目录以保存文件:
var url = 'upload/<?= $year?>/<?= $logged_user?>';
用于服务器端实现的blueimp / jQuery-File-Upload发行版includes a set of PHP files,看起来index.php
应该是你应该指向的url
。我不熟悉插件或后端处理程序,但查看源代码我可以看到指定上传目录的位置,on line 47:
'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/files/',
这是您可以进行year/user/
目录自定义的地方。
至于您看到403 Forbidden
错误的原因:因为您已将目录指定为url
,fileupload
将在其中发布文件。您的url
没有尾部斜杠(upload/2017/abcd
)和Apache will forward that - 作为GET - 与尾随斜杠的同一目录。由于目录中没有合适的索引文件来处理请求(没有index.html
,index.php
和/或在Apache中配置为DirectoryIndex
的任何内容,因此Apache将尝试执行此操作目录列表。但是,您已禁用目录列表(Options -Indexes
),因此您获得了403 Forbidden
。您应该能够通过查看浏览器devtools,单击“网络”选项卡并检查其中的请求来验证所有这些。
作为旁注,您要在Javascript中为upload_dir
指定upload_url
和fileupload()
选项,但这些是我在上面链接的后端PHP处理程序中的变量。他们是PHP变量,并且在您的Javascript中没有任何效果,您应该删除它们以避免混淆。