bootstrap fileinput 上传文件
最近用到文件上传功能,
说实话:以前遇到过一次,COPY了别人的代码
结束!
这次又要用,可是看到别人很酷的文件上传功能,心痒了!
好吧。简单的办法,找控件:
bootstrap fileinput
真是好看:
bootstrap-fileinput源码:https://github.com/kartik-v/bootstrap-fileinput
bootstrap-fileinput在线API:http://plugins.krajee.com/file-input
bootstrap-fileinput Demo展示:http://plugins.krajee.com/file-basic-usage-demo
可是好用吗?不知道。用吧!
-----------------------------------------------
苦难开始了!
因为没有用过,所以还 直接COPY别的代码:(http://blog.csdn.net/doc_wei/article/details/53783790)
尽管写的很详细了,但还是不太懂!
总是提示:
405 method not allowed!
提示用了POST 请求。找了N种方案……
此处省略N万字……
最后才发现我用错了:
oFile.Init = function(ctrlName, uploadUrl) {
                var control = $('#' + ctrlName);
            //初始化上传控件的样式
                control.fileinput({
                language: 'zh', //设置语言
                uploadUrl: uploadUrl, //上传的地址
}
我一直把这个uploadUrl当成是文件上传保存的文件夹。
(JS怎么可能会在服务器上存文件,这个理解可是差了十万八千里呀)
因为是个文件夹,不接受任何的POST,GET
即便是我给了所有的谓词允许
而实际上:这个uploadUrl 是后台处理的上传文件的页面或是一般处理程序
比如:A.aspx 或 fileHandler.ashx
我用的是 .ashx
using System;
using System.Web;
using System.Text; public class HandlerFile : IHttpHandler { public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "application/json";
HttpPostedFile uploadFile = context.Request.Files[]; string fileName = uploadFile.FileName;
int fileSize = uploadFile.ContentLength;
string fileExt = System.IO.Path.GetExtension(fileName).ToLower();
string directoryPath = "~/upload/";
uploadFile.SaveAs(System.Web.HttpContext.Current.Server.MapPath(directoryPath) + fileName);
context.Response.Write("{\"fileName\":"+"\""+fileName+"\"}");
} public bool IsReusable {
get {
return false;
}
}
}
这样就保存好了!
//注意:这里保存,需要设置 文件夹对对应的 写入权限,否则会收到 FORBBIDEN 提示
//我这里用到的是 根目录下的UPLOAD 文件夹,所以要设置这个文件夹的写入权限
JS部分:
menu={ 
fileInput: function ()
    {
        var oFile = new Object();
        //初始化fileinput控件(第一次初始化)
        oFile.Init = function(ctrlName, uploadUrl) {
            var control = $('#' + ctrlName);
            //初始化上传控件的样式
            control.fileinput({
                language: 'zh', //设置语言
                uploadUrl: uploadUrl, //上传的地址
                showUpload: true, //是否显示上传按钮
                showCaption: true,//是否显示标题
                browseClass: "btn btn-primary", //按钮样式
                'theme': 'explorer',
                maxFileCount: 10, //表示允许同时上传的最大文件个数
                enctype: 'multipart/form-data',
                validateInitialCount:true,
                previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
                msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!"
            });
            //导入文件上传完成之后的事件
            $("#uploadfile").on("fileuploaded", function (event, data, previewId, index) {
                console.dir(data);           //这是在别人的指点下才会用的,可以查看对象,这里主要是JSON对象
                alert(data.files[0].name);
                //$("#div_startimport").show();
            });
        }
        return oFile;
    },
   onSubmit:function()
   {
    $("#uploadFile").fileinput("upload");
   }
}
前台HTML:
//只是简单的示例而已,大家看一眼
//这里不需要点击SUBMIT 按钮,只接点击控件上的上传文件即可
//1、如果需要通过点击SUBMIT再上传,需要 初始化时设置显示上传按键为FALSE
// showUpload:false 不显示上传按钮
// 在SUBMIT 的CLICK 事件中调用 上传事件
// submitClick="menu.onSubmit();"
//2、如果想传递其他参数,则需要设置
// uploadExtraData 选项,
<body style="padding:16px;">
<div class="panel panel-default">
<div class="panel-heading">
this is a test
</div>
<div class="panel-body">
<form enctype="multipart/form-data" action="../handlerFile.ashx">
<!--<input id="kv-explorer" type="file" multiple>-->
<input type="file" name="uploadfile" id="uploadfile" multiple class="file-loading" />
<br> <button type="submit" class="btn btn-primary">Submit</button>
<button type="reset" class="btn btn-default">Reset</button>
</form>
</div>
</div>
</body>
<script type="text/javascript"> $(document).ready(function () {
var oFileInput = new menu.fileInput();
oFileInput.Init("uploadfile", "../handlerFile.ashx");
});
</script>
1、这里需要注意的地方:
uploadExtraData 的设置位置有要求(不知道是不是我没有弄明白)
我直接这样写代码是取不到值的:
onSubmit: function ()
{
var parentID = common.QueryString("parentId").toString();
var level = common.QueryString("level").toString();
var extrData = {'parentId':parentID,'level':level};
////console.log("the transfer URL____"+extrData);
//$("#uploadfile").fileinput({});
oFileInput.uploadExtraData = extrData;
//console.dir(oFileInput);
$("#uploadfile").fileinput("upload");
}
需要在初始化里加入这个数据如下:
fileInput: function () {
        var oFile = new Object();
        //初始化fileinput控件(第一次初始化)
        oFile.Init = function (ctrlName, uploadUrl) {
            var control = $('#' + ctrlName);
            var parentID = common.QueryString("parentId").toString();
            var level = common.QueryString("level").toString();
            var extrData = { 'parentId': parentID, 'level': level };
            //var  extrData = {'parentId':'1','level':'2'};
            //console.dir(extrData);
            //初始化上传控件的样式
            control.fileinput({
                language: 'zh', //设置语言
                uploadUrl: uploadUrl, //上传的地址
                //allowedFileExtensions: ['jpg', 'gif', 'png'],//接收的文件后缀
                showUpload: true, //是否显示上传按钮
                showCaption: true,//是否显示标题
                browseClass: "btn btn-primary", //按钮样式
                uploadExtraData: extrData,
                'theme': 'explorer',
                maxFileCount: 10, //表示允许同时上传的最大文件个数
                enctype: 'multipart/form-data',
                validateInitialCount: true,
                previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
                msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!"
            });
            //导入文件上传完成之后的事件
            $("#uploadfile").on("fileuploaded", function (event, data, previewId, index) {
                console.dir(data);
                alert(data.files[0].name);
            });
        }
        return oFile;
    }
2、需要注意的是:
      uploadExtraData 格式不能写为  uploadExtraData: '{"parentId": "_parentID", "level":"_level"}'    外面加''   变成字符串了
      应该直接写成这样: uploadExtraData: {'parentId':'_parentId','level':'_level'}                                    这里是个对象
---------------------------------------------------------------------------
2017-09-14更:
------------------------------
把初始化方法改成这样可以将用户填写的数据传到后台:
control.fileinput({
                language: 'zh', //设置语言
                uploadUrl: uploadUrl, //上传的地址
                //allowedFileExtensions: ['jpg', 'gif', 'png'],//接收的文件后缀
                showUpload: true, //是否显示上传按钮
                showCaption: true, //是否显示标题
                browseClass: "btn btn-primary", //按钮样式 previewId, index
                uploadExtraData: function () {
                    var data = {
                        parentId: $("#fileType").val()
                    };
                    return data;
                },
                'theme': 'explorer',
                maxFileCount: 10, //表示允许同时上传的最大文件个数
                enctype: 'multipart/form-data',
                validateInitialCount: true,
                previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
                msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!"
            });
bootstrap fileinput 上传文件的更多相关文章
- bootstrap fileinput上传文件
		
参考博客:https://blog.csdn.net/linhaiyun_ytdx/article/details/76215974 https://www.cnblogs.com/parker-y ...
 - .net core版 文件上传/ 支持批量上传,拖拽以及预览,bootstrap fileinput上传文件
		
asp.net mvc请移步 mvc文件上传支持批量上传,拖拽以及预览,文件内容校验 本篇内容主要解决.net core中文件上传的问题 开发环境:ubuntu+vscode 1.导入所需要的包:n ...
 - Bootstrap FileInput 上传  中文 API 整理
		
Bootstrap FileInput 上传 中文 API 整理 上传插件有很多 但是公司用的就是 Bootstrap FileInput 自己就看了看 会用就行 自己都不知道每个值是干嘛用的就问 ...
 - 使用bootstrap创建上传文件
		
1.导入样式,注意顺序 <!-- bootstrap样式 --> <link rel="stylesheet" href="/static/bootst ...
 - bootstrap改变上传文件按钮样式,并显示已上传文件名
		
参考博文: html中,文件上传时使用的<input type="file">的样式自定义 html中<input type="file"&g ...
 - 关于Bootstrap fileinput 上传新文件,移除时触发服务器同步删除的配置
		
在Bootstrap fileinput中移除预览文件时可以通过配置initialPreviewConfig: [ { url:'deletefile',key:fileid } ] 来同步删除服务器 ...
 - bootstrap fileinput上传返回400,404,500 等错误替换
		
$(".uploadfile").on('filebatchuploaderror', function(event, data, msg) { $(".file-err ...
 - 基于bootstrap的上传插件fileinput实现ajax异步上传功能(支持多文件上传预览拖拽)
		
首先需要导入一些js和css文件 ? 1 2 3 4 5 6 <link href="__PUBLIC__/CSS/bootstrap.css" rel="exte ...
 - 【Bootstrap】bootstrap-fileinput上传文件插件
		
[bootstrap-fileinput] 这是个据传最好用的bootstrap相关联的文件上传控件,支持拖曳上传,多线程上传,上传文件预览等等功能. 首先还是说一下要引入的一些文件: <lin ...
 
随机推荐
- bzoj 4104 解密运算 —— 思路
			
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4104 一开始发现了给出的顺序是按这些末尾字符后面的后缀排序得到的: 然后发现可以一个一个把字 ...
 - 洛谷P3205合唱队——区间DP
			
题目:https://www.luogu.org/problemnew/show/P3205 枚举点,分类为上一个区间的左端点或右端点,满足条件便+=即可: 注意不要重复(当l=2时). 代码如下: ...
 - MongoDB主从复制,主主复制
			
MongoDB主从复制,是不需要像mysql那样从数据库事先要完整的主数据快照背景介绍:mongodb支持一主一从或多从复制1) master节点: mongod --dbpath=/usr/M ...
 - Poj_1068 Parencodings
			
S (((( )( )() ) ) ) P-sequence 4 5 6666,表示第i个右括号的左边有几个左括号. W-sequence 1 1 1456,表示第i个右括号和以 ...
 - zk 09之:Curator之二:Path Cache监控zookeeper的node和path的状态
			
在实际应用开发中,当某个ZNode发生变化后我们需要得到通知并做一些后续处理,Curator Recipes提供了Path Cache 来帮助我们轻松实现watch ZNode. Path Cache ...
 - Behave + Selenium(Python) 四
			
来自T先生 今天我们开始讲讲behave的厉害的地方. Tag文件的使用 在behave里面,如何来控制哪些case需要run,哪些case不需要run,这个时候就用Tag来控制.好了,接下来我用Ta ...
 - nodejs的mysql模块学习(二)连接数据库
			
nodejs连接mysql的方式有两种 官方建议的第一种是 let mysql = require('mysql'); let connection = mysql.createConnection( ...
 - Spring入门第十六课
			
接上一次讲课 先看代码: package logan.spring.study.annotation.repository; public interface UserRepository { voi ...
 - UVa 1663 Purifying Machine (二分匹配)
			
题意:每一个01串中最多含有一个‘*’,‘*’既可表示0也可表示1,给出一些等长的这样的01串,问最少能用多少个这样的串表示出这些串. 如:000.010.0*1表示000.010.001.011,最 ...
 - 使用MeshLab的技巧总结(自己原创总结)
			
1.放大点的显示,Alt+wheel,即按住Alt键后使用鼠标滑轮改变点的显示大小.