Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于文件上传 Ioc 配置项的扩展 #568

Closed
Wizzercn opened this issue Dec 24, 2013 · 12 comments
Closed

关于文件上传 Ioc 配置项的扩展 #568

Wizzercn opened this issue Dec 24, 2013 · 12 comments

Comments

@Wizzercn
Copy link
Member

希望 Ioc配置文件upload.js 增加扩展配置项,具体实现不需要,只要能从后台获取即可。
主要实现对不同类型文件的分类,比如:
extFiletype={"images":"jpg|gif","music":"mp3","video":"mp4|3gp|rm","other":"."}

这样我在做文件上传的时候,就可以方便的根据类型取后缀名或反过来根据后缀名取类型,来实现不用上传模块限制文件类型的需求。

例如:相册模块限制上传图片文件、视频模块限制为视频格式等等。

PS:最终目的是减少配置文件,不用单独写个配置文件来实现,直接在upload.js里扩展配置项那不是挺好么。。。

@Wizzercn
Copy link
Member Author

other: 星.星 //默认

@ywjno
Copy link
Member

ywjno commented Dec 24, 2013

取得后缀名来判断类型还不如直接通过 content-type 来判断类型呢

@Wizzercn
Copy link
Member Author

不管怎么判断,这个需求的重点是分类。

@ywjno
Copy link
Member

ywjno commented Dec 24, 2013

自己做一个 静态类 或者 枚举类 咯

@Wizzercn
Copy link
Member Author

能实现此功能的方法当然很多,比如静态类、配置文件什么的,难道在上传文件的配置加个扩展配置项不是更灵活更简单吗?对于Nutz来说只是举手之劳,却省却了大家另外写配置文件的麻烦。Nutz的初衷不就包括“零”配置吗?

@Wizzercn
Copy link
Member Author

具体实现不需要做,只要能从后台获取这个配置项值即可,这样关于文件上传的配置只用一个配置文件即可。

PS:当然,灵活的做法是不固定写死扩展配置项,随便用户怎么配,其他人说不定有其他需求,不如写的灵活些。

@zozoh
Copy link
Member

zozoh commented Dec 24, 2013

@Wizzercn 额,你的意思是说,你不想根据这篇文档
写诸如:

...
tmpFilePool : {
    type : 'org.nutz.filepool.NutFilePool',
    // 临时文件最大个数为 1000 个
    args : [ "~/nutz/blog/upload/tmps", 1000 ]   
},
uploadFileContext : {
    type : 'org.nutz.mvc.upload.UploadingContext',
    singleton : false,
    args : [ { refer : 'tmpFilePool' } ],
    fields : {
        // 是否忽略空文件, 默认为 false
        ignoreNull : true,
        // 单个文件最大尺寸(大约的值,单位为字节,即 1048576 为 1M)
        maxFileSize : 1048576,
        // 正则表达式匹配可以支持的文件名
        nameFilter : '^(.+[.])(gif|jpg|png)$' 
    } 
},
myUpload : {
    type : 'org.nutz.mvc.upload.UploadAdaptor',
    singleton : false,
    args : [ { refer : 'uploadFileContext' } ] 
}
...

一样的配置文件,而是想在 @AdaptorBy 注解上,直接支持一个参数,可以声明文件类型,对吗?

@Wizzercn
Copy link
Member Author

@zozoh 额,,我的意思是在这个配置文件下加一个配置项:
fields : {
// 是否忽略空文件, 默认为 false
ignoreNull : true,
// 单个文件最大尺寸(大约的值,单位为字节,即 1048576 为 1M)
maxFileSize : 1048576,
// 正则表达式匹配可以支持的文件名
nameFilter : '^(.+[.])(gif|jpg|png)$' ,
extFiletype={"images":"jpg|gif","music":"mp3","video":"mp4|3gp|rm","other":"."}
}

extFiletype名字Nutz可随便定义,值由用户自定义,只要后台能取到这个值即可。我在做文件类型判断的时候不就不用另外写配置文件了,,,而且对于Nutz来说,改动也不大。

这个需求在做网站类型项目时都是需要的。文件相关的配置放在一个配置文件不是很好么。。

@zozoh
Copy link
Member

zozoh commented Dec 24, 2013

@Wizzercn 哦,你就是想知道,你入口函数比如:

public void uploadPhoto( @Param("photo") TempFile tf){
       // 你要在这里知道 tf 这个文件到底是音乐,图片还是什么其他的类型,对吧?
}

如果是这种需求,恐怕我们是不会在核心包里做支持的。
因为这个需求过于具体,而且并没有被 Nutz 其他的使用者广泛的要求。

你完全可以像 @ywjno 说的,自己可以一个静态函数

public static String getUploadFileMedieType(TempFile tf);

来解决这个问题,这也相当于是一种配置。

很多时候,我们的确可以稍微加一点点代码就能满足各种具体的需求,但是我们坚持很保守的加入这些特性,
为的是保证这个小 jar 包的简单,我们更希望的是帮助程序员处理非常麻烦的事情,而不是“尽量多的事情”
这样,大多数程序员会觉得这个 jar 包比较干净,否则经过数个版本后,这个 jar 包极有可能会扩展的面目全非。
我的原则是尽量获取大家的交集,而不是并集。希望你能理解我们的初衷,谢谢

@Wizzercn
Copy link
Member Author

如同:
String name=upload.getContext().getNameFilter();
一样,可以:
String name=upload.getContext().getExtFiletype();

只是加一个用户可以自定义内容的扩展配置项,相信搞web开发做上传文件,都需要这个配置项,

当然,我描述的需求比较具体,但其他人可以通过这个配置项配置自己的内容,比起upload.js固定死的配置项,
增加一个灵活用户可自定义的参数,方便扩展岂不更好?

对于Nutz来说可能仅仅增加2行代码,但对于大多数搞web开发的却省却了另外搞个配置文件的麻烦。

@Wizzercn
Copy link
Member Author

自己实现了,有类似需求的可参考:
http://www.wizzer.cn/?p=2833

@zozoh
Copy link
Member

zozoh commented Dec 27, 2013

@Wizzercn 还是觉得你直接在一个静态函数里做个 switch...case 更简洁一些 :P
这个问题先关了哦,以后看看有没有人提类似的需求

@zozoh zozoh closed this as completed Dec 27, 2013
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants