立即注册 登录
彼岸网 返回首页

天香公主的个人空间 http://www.bian-wang.com/discuz/?10005 [收藏] [复制] [分享] [RSS] txgz999@yahoo.com

日志

Discuz插件开发:上传文件插件

热度 5已有 3548 次阅读2016-5-17 05:46 PM |个人分类:Discuz| 上传文件, 开发, 彼岸, 用户

Discuz插件开发:上传文件插件

彼岸网提供了让网友上传文件的功能,为我写日志提供了很大的方便,但使用下来也感到有一定不足,一是没法删除上传后的文件,二是网友们上传的文件都在一起不容易找到。所以我尝试自己写了个上传文件和管理文件的插件,和网友们分享。


在启用后,站长可以设置每个用户上传的文件总尺寸的限额,默认值是200MB, 和允许上传的文件扩展名, 默认值是 chm, pdf, zip, rar, tar, gz, bzip2, gif, jpg, jpeg, png, txt, doc, mp3, mp4,以及允许哪些用户组的用户使用本插件:

这个插件启用后可以按路径 plugin.php?id=txgz_file_uploader:files 来进入上传网页。这个路径可以放在站长认为合适的地方来让用户使用,比如在上图中在主导航栏的"帮助"下加了个子菜单项"上传文件"来进入这个网页。

用户可以上传的单个文件的最大尺寸受PHP环境中的三个设置值所控制:memory_limit, post_max_size, upload_max_filesize,不能超过其中任何一个(见 链接 中的讨论)。一般有必要加大post_max_size和upload_max_filesize的值。在自己机器上可以在 php.ini 里调整,在托管共用的服务器上要按服务商提供的方法设置。比如在 namecheap.com 里,在 Software and Services -> Select PHP Version -> Switch To PHP Settings里设置。


如果用户要上传的文件尺寸超过这些设置值的话,会得到类似下面的出错信息:


点击上传后的文件地址末的图标 会将文件地址拷贝到Clipboard里,再粘贴到需要的地方去。

这个插件包含了两个模块。一个'管理中心-列表链接'模块让管理员集中管理所有用户的上传文件。另一个仅供管理员使用的'页面嵌入'模块,它的作用是在网页上的内容管理菜单上添加一个'管理文件'菜单项,让管理员能进入管理中心直接管理当前显示的个人空间用户的文件。


管理员也可以进入管理中心里在应用里点击本插件下的'文件管理'链接来集中管理所有用户上传的文件:


插件下载: http://www.bian-wang.com/discuz/data/userupload/10005/txgz_file_uploader.zip (01/10/2017更新)
更新记录:
05/29/2016: 确保长链接能自动换行
05/30/2016: 1)添加插件设置让站长选择哪些用户组的用户可以使用本插件,2)修补漏洞:当上传文件名中含 & 时删除失败
06/01/2016: 支持同时上传多个文件
06/02/2016: 解决iPhone上传同名图片image.jpg问题
06/04/2016: 加了个管理中心模块"文件管理",供管理员管理用户上传的文件用
06/05/2016: 1)在文件列表页上添加分页显示(每五十个文件一页),2)在内容管理菜单上添加管理文件菜单项
06/06/2016: 1)遵循PRG模式, 2)设了插件网页标题,3)一些风格改进
06/07/2016: 1)解决昨天的修改后Mac机器上Safari里操作后文件列表不实时更新问题, 2)解决iPad上传同名图片image.jpeg问题
06/25/2016: 1)支持远程空间,2)上传文件夹位置由网站上传设置决定, 3)在上传文件夹里添加空白index.html以避免显示文件目录
06/26/2016: 1)在列表里显示上传时间,2)点击表列标题来按列排序,3)缩短了显示列表所用时间
11/10/2016: 将文件名排序从区分大小写改成不区分大小写
01/10/2017: 不同的FTP服务端软件提供文件修改时刻的做法有所不同,修改代码来兼容这个差异


发表评论 评论 (213 个评论)

回复 sesemule 2017-4-6 11:57 PM
天香公主: 可以说是安卓的问题,我用的就是最基本的html里的file element,而它们的webview也不完全支持。也可以说是微信的问题,因为微信是有条件支持这个功能的,但它们 ...
感谢回复。
回复 天香公主 2017-4-6 10:48 PM
sesemule: 抱歉,之前没有做认真的测试,现在确认DZ的相册上传照片、发帖上传照片功能在微信、手机QQ的内置浏览器里也是不可用的。

之所以有这种误解,是因为向我反馈问题 ...
可以说是安卓的问题,我用的就是最基本的html里的file element,而它们的webview也不完全支持。也可以说是微信的问题,因为微信是有条件支持这个功能的,但它们没做 https://coderanch.com/t/645447/html-file-input-work-android

WebView is an embedded browser control, but it's not fully autonomous. For many tasks, it relies on the application that is embedding it to perform some actions.

Showing file chooser dialog, showing javascript alert popups, etc. are some such tasks where the WebView just provides callbacks to the application and expects the application to display appropriate views like a file open dialog or message popup.

但网页本身就没有条件支持这个功能了。
回复 sesemule 2017-4-6 10:21 PM
天香公主: 我没用过手机QQ,只能测试下微信。

在iPad上微信里打开网站链接登录后,上传文件没问题,这张就是我在那上传的 http://www.bian-wang.com/discuz/data/useruplo ...
抱歉,之前没有做认真的测试,现在确认DZ的相册上传照片、发帖上传照片功能在微信、手机QQ的内置浏览器里也是不可用的。

之所以有这种误解,是因为向我反馈问题的网友在反馈上传文件插件不可用的同时上传了几张照片到相册,所以我以为他是在手机QQ的内置浏览器里上传的照片,但后来问了并不是,而是使用谷歌浏览器上传的。再次致歉。

也就是说,这个问题其实是微信和手机QQ的问题,网页端并没有更好的办法解决?
回复 天香公主 2017-4-6 07:43 PM
sesemule: 天香:这个插件在浏览器里使用正常(包括PC浏览器、手机浏览器),但是在微信和手机QQ的内置浏览器里无法使用。

比如说,我把网站分享到朋友圈、QQ空间或者关联 ...
我没用过手机QQ,只能测试下微信。

在iPad上微信里打开网站链接登录后,上传文件没问题,这张就是我在那上传的 http://www.bian-wang.com/discuz/data/userupload/10005/IMG_3561.PNG

在安卓手机上做同样操作,点击上传文件按钮没反应,看了看网上别人也有这问题 https://www.qianduan.net/wei-xin-bu-zhi-chi-webview-nei-wen-jian-shang-chuan-liao-no/https://www.zhihu.com/question/21452742

你说'使用DZ的相册功能上传照片是正常的',这我有点奇怪了,至少彼岸网在上述我测试的两个环境里选择图片按钮都是不显示的所以也没法上传。不知你的网站在这个功能上是不是用了我写的代码或者是他人的插件。如果你确认可以在相册里上传照片的话,我想去你那试试看。
回复 sesemule 2017-4-6 09:25 AM
天香:这个插件在浏览器里使用正常(包括PC浏览器、手机浏览器),但是在微信和手机QQ的内置浏览器里无法使用。

比如说,我把网站分享到朋友圈、QQ空间或者关联到公众号,会有网友是在微信、手机QQ里直接打开网站的,这种情况下无法使用这个插件上传文件(但是使用DZ的相册功能上传照片是正常的),提示“没有应用可执行此操作”(微信)“无法打开文件选择器”(手机QQ)。

彼岸网也使用了这个插件,我测试过在微信、手机QQ的内置浏览器里存在相同的问题。
回复 carry0987 2016-11-10 09:05 PM
天香公主:    不需要我同意吧
你是作者嘛,當然要啊
回复 sesemule 2016-11-10 09:04 PM
天香公主: 在文件func.php中的函数getuploads里将下面这句
    $orderByFunc = 'sortByName';
改成
    $orderByFunc = 'sortByDateline';
    if ($orderby == 'name') $o ...
感谢。
回复 天香公主 2016-11-10 08:48 PM
sesemule: 天香,请问如何设置默认排序为上传时间?因为上传文件后会习惯于认为列表里的第一个文件是刚刚上传的,而现在的默认排序是名称,似乎不太符合习惯。 ...
在文件func.php中的函数getuploads里将下面这句
    $orderByFunc = 'sortByName';
改成
    $orderByFunc = 'sortByDateline';
    if ($orderby == 'name') $orderByFunc = 'sortByName';
回复 天香公主 2016-11-10 08:45 PM
carry0987: 在代碼那邊修改即可,不過要天香同意
   不需要我同意吧
回复 carry0987 2016-11-10 10:52 AM
sesemule: 天香,请问如何设置默认排序为上传时间?因为上传文件后会习惯于认为列表里的第一个文件是刚刚上传的,而现在的默认排序是名称,似乎不太符合习惯。 ...
在代碼那邊修改即可,不過要天香同意
回复 sesemule 2016-11-10 08:41 AM
天香,请问如何设置默认排序为上传时间?因为上传文件后会习惯于认为列表里的第一个文件是刚刚上传的,而现在的默认排序是名称,似乎不太符合习惯。
回复 carry0987 2016-10-23 02:46 AM
http://www.fucknehs.com/icnc/upload/
回复 carry0987 2016-9-11 12:00 PM
天香公主: 回来了
那,我提供的那個開源的文件上傳介面如何?功能較多,不過相對比較複雜
回复 天香公主 2016-9-10 11:00 AM
carry0987: 度假回來了嗎?~
回来了
回复 carry0987 2016-9-10 05:32 AM
度假回來了嗎?~
回复 carry0987 2016-8-23 04:04 AM
天香,目前找到了一個免費開源的文件上船的網頁。使用JQ的,你看看吧~(支援多選刪除,進度條...等)
http://www.fucknehs.com/icnc/upload/

原始文件:
https://qbnehs.besv.net/test/userupload/1/file%20upload.zip
回复 carry0987 2016-6-30 10:37 PM
天香公主: 没加对文件名的限制,因为我觉得有上传中文名的文件如歌曲名为文件名的需要,而且至今没发现问题。如果你发现有因文件名的问题无法上传或上传后无法接触的实例, ...
沒問題,空格文件
回复 carry0987 2016-6-27 07:11 PM
天香公主: 如果你说的是带空格的文件名,那这次的改动里有对此的支持,你试试?
好,今晚試試
回复 东风 2016-6-27 12:42 AM
天香公主: 改好了,你重新安装下吧
       
回复 sesemule 2016-6-26 10:00 PM
又更新了?真棒!

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

小黑屋|Archiver|彼岸网  

Powered by Discuz! X3.1 © 2001-2014 Comsenz Inc.
GMT-4, 2017-4-25 10:19 PM , Processed in 0.060262 second(s), 19 queries.

返回顶部