最近用到文件上传功能,

说实话:以前遇到过一次,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 上传文件的更多相关文章

  1. bootstrap fileinput上传文件

    参考博客:https://blog.csdn.net/linhaiyun_ytdx/article/details/76215974  https://www.cnblogs.com/parker-y ...

  2. .net core版 文件上传/ 支持批量上传,拖拽以及预览,bootstrap fileinput上传文件

    asp.net mvc请移步 mvc文件上传支持批量上传,拖拽以及预览,文件内容校验 本篇内容主要解决.net core中文件上传的问题  开发环境:ubuntu+vscode 1.导入所需要的包:n ...

  3. Bootstrap FileInput 上传 中文 API 整理

    Bootstrap FileInput 上传  中文 API 整理 上传插件有很多 但是公司用的就是 Bootstrap FileInput 自己就看了看  会用就行 自己都不知道每个值是干嘛用的就问 ...

  4. 使用bootstrap创建上传文件

    1.导入样式,注意顺序 <!-- bootstrap样式 --> <link rel="stylesheet" href="/static/bootst ...

  5. bootstrap改变上传文件按钮样式,并显示已上传文件名

    参考博文: html中,文件上传时使用的<input type="file">的样式自定义 html中<input type="file"&g ...

  6. 关于Bootstrap fileinput 上传新文件,移除时触发服务器同步删除的配置

    在Bootstrap fileinput中移除预览文件时可以通过配置initialPreviewConfig: [ { url:'deletefile',key:fileid } ] 来同步删除服务器 ...

  7. bootstrap fileinput上传返回400,404,500 等错误替换

    $(".uploadfile").on('filebatchuploaderror', function(event, data, msg) { $(".file-err ...

  8. 基于bootstrap的上传插件fileinput实现ajax异步上传功能(支持多文件上传预览拖拽)

    首先需要导入一些js和css文件 ? 1 2 3 4 5 6 <link href="__PUBLIC__/CSS/bootstrap.css" rel="exte ...

  9. 【Bootstrap】bootstrap-fileinput上传文件插件

    [bootstrap-fileinput] 这是个据传最好用的bootstrap相关联的文件上传控件,支持拖曳上传,多线程上传,上传文件预览等等功能. 首先还是说一下要引入的一些文件: <lin ...

随机推荐

  1. 51 nod 1522 上下序列——序列dp

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1522 很好的思想.考虑从小到大一对一对填数,这样也能对它的大小限制 ...

  2. makefile 使用【转载】

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客: http://blog.csdn.net/haoel/article/details/2886 makefile很重 ...

  3. 排名Top 16的Java实用类库

    (转载: http://www.hollischuang.com/archives/1606) github地址: https://github.com/liufeiSAP/javaStudy.git ...

  4. Docker入门(二):安装/卸载

    这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...

  5. ABP启动流程分析

    添加服务与注册中间件 public IServiceProvider ConfigureServices(IServiceCollection services) { // Configure Abp ...

  6. Linux下搭建tomcat集群全记录

    (转) Linux下搭建tomcat集群全记录 2011-10-12 10:23 6133人阅读 评论(1) 收藏 举报 tomcatlinuxapacheinterceptorsession集群 1 ...

  7. 《Java多线程编程核心技术》读后感(二)

    方法内的变量为线程安全 package Second; public class HasSelfPrivateNum { public void addI(String username) { try ...

  8. day1 java基础回顾-集合

    1.集合 1.1 集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, 查找快, 增删慢 由于是数组实现 ...

  9. yzm10与战地信使 yzm10原创系列

    yzm10与战地信使 M国与R国正进行着激烈的鏖战,此时的yzm10从R国窃取了最高军事机密,这份情报将是此次战役的转折点,如果M国得到了这份情报,就能够取得这次战争的胜利.yzm10当然是站在M国这 ...

  10. 分类---Logistic Regression

    一 概述 Logistic Regression的三个步骤 现在对为什么不使用均方误差进行分析(步骤二的) 由上图可以看出,当距离目标很远时,均方误差移动速率也很慢,不容易得到好的结果. Discri ...