1.使用input标签进行图片操作,input的标签有一个accept属性,accept 属性只能与 <input type="file"> 配合使用。它规定能够通过文件上传进行提交的文件类型,多个属性值使用逗号分隔<input accept="audio/*,video/*,image/*">

如果想使用浏览器原生特性实现文件上传(如图片)效果,父级的form元素有个东西不能丢,就是:enctype="multipart/form-data" enctype属性规定在发送到服务器之前应该如何对表单数据进行编码,默认的编码是:”application/x-www-form-urlencoded“。对于普通数据是挺适用的,但是,对于文件什么的,就不能乱编码了,该什么就是什么,只能使用multipart/form-data作为enctype属性值。

html代码:

              <div class="detail-item">
<form action="" enctype="multipart/form-data" id="formData2">
<span class="item-tit" style="margin-top: 22px;">头像</span>
<ul class="clearfix list-unstyled pic-list">
<li>
<img id="imgName" ms-attr-src="UserData.Files" style="width: 120px; height: 150px; border-radius: 3px;">
</li>
<li>
<span class="info"><input id="file" class="filepath" onchange="changepic(this)" type="file" accept="image/*" /></span>
<span class="info"><input type="button" id="uploadbt" ms-click="UploadImage()" style="background-image:url(/ViewV5/JS/jquery.uploadify-v2.1.0/kssc.png); width:75px; height:28px; border:0px; cursor:pointer" /></span> <input type="hidden" id="imgPath" ms-duplex="UserData.Files"/>
</li>
</ul>
</form>
</div>

2.图片预览

就是替换img的src;而读取URL有filereader 和 URL.createObjectURL 两种预览方式。这两种方式可以获得上传图片的名字(name)

    //图片预览
function changepic() {
//var reads = new FileReader();
//var f = document.getElementById('file').files[0];
//reads.readAsDataURL(f);
//reads.οnlοad = function(e) {
// document.getElementById('imgName').src = this.result;
//};
var newsrc = getObjectURL(document.getElementById('file').files[0]);
document.getElementById('imgName').src = newsrc;
}
//建立一個可存取到該file的url
function getObjectURL(file) {
var url = null ;
// 下面函数执行的效果是一样的,只是需要针对不同的浏览器执行不同的 js 函数而已
if (window.createObjectURL!=undefined) { // basic
url = window.createObjectURL(file) ;
} else if (window.URL!=undefined) { // mozilla(firefox)
url = window.URL.createObjectURL(file) ;
} else if (window.webkitURL!=undefined) { // webkit or chrome
url = window.webkitURL.createObjectURL(file) ;
}
return url ;
}

3.图片上传

前端js:

  UploadImage: function (e) {
var ofile = $("#file").get(0).files[0];
var formData = new FormData();
if (!ofile) {
alert('请上传文件');
return;
}
var size = ofile.size / 1024 / 1024;
if (size > 1) {
alert('文件不能大于1M');
return;
}
formData.append("file", ofile);//这个是文件,这里只是演示上传了一个文件,如果要上传多个的话将[0]去掉
formData.append("F_ID", $("#F_ID").val());//这个是上传的其他参数
$.ajax({
url: '/ViewV5/Base/UploadTX.ashx',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (msg) {
if (msg) {
var obj = JSON.parse(msg);
if (obj.success) {
$("#imgPath").val(obj.sourceUrl);
}
top.ComFunJS.winsuccess("操作成功");
}
},
error: function (msg) {
console.log(msg);
}
});
}

后端:上传到网站根目录下,并返回相对路径需要提交表单的时候保存到数据库。

HttpFileCollection files = HttpContext.Current.Request.Files;
if (files.Count>)
{
UpSaveImg(context,files[]);
}
/// <summary>
/// 新的上传方法
/// </summary>
/// <param name="file"></param>
public void UpSaveImg(HttpContext context,HttpPostedFile file)
{
try
{
if (file.ContentLength > * )
{
context.Response.Write("{\"statusCode\":\"300\", \"message\":\"文件过大,限制1M以内!\"}");
return;
}
Result result = new Result();
result.success = false;
result.msg = "Failure!";
string tx_path = HttpContext.Current.Server.MapPath(UploadFile);//获取文件上传路径
TXFileHelper.CreateDir(tx_path);
string fileName = DateTime.Now.ToString("yyyyMMddhhmmssff") + CreateRandomCode();
file.SaveAs(tx_path + fileName + ".jpg");
result.success = true;
result.msg = "sucess";
result.sourceUrl = tx_path + fileName + ".jpg";
result.sourceUrl = @"\images" + Regex.Split(result.sourceUrl, "images", RegexOptions.IgnoreCase)[] ;//图片的相对路径
//返回图片的保存结果(返回内容为json字符串,可自行构造,该处使用Newtonsoft.Json构造)
context.Response.Write(JsonConvert.SerializeObject(result));
}
catch (Exception ex)
{
context.Response.Write(ex.Message.ToString() + ex.StackTrace);
}

webform的原生操作图片预览和上传的更多相关文章

  1. 【javascrpt】——图片预览和上传,兼容IE 9-

    下载DEMO:https://github.com/CaptainLiao/zujian/tree/master/Upload 对于现代浏览器来说,要实现图片预览非常简单: 1.fileReader. ...

  2. jQuery+Ajax实现图片的预览和上传

    jQuery+Ajax实现图片的预览和上传 1.配置Spring-web.xml <!-- springmvc上传图片 --> <bean id="multipartRes ...

  3. 【项目相关】MVC中使用WebUploader进行图片预览上传以及编辑

    项目中需要用到多图片上传功能,于是在百度搜了一下,首先使用了kissy uploader,是由阿里前端工程师们发起创建的一个开源 JS 框架中的一个上传组件...但,后面问题出现了. 在对添加的信息进 ...

  4. 对百度WebUploader的二次封装,精简前端代码之图片预览上传(两句代码搞定上传)

    前言 本篇文章上一篇: 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传) 此篇是在上面的基础上扩展出来专门上传图片的控件封装. 首先我们看看效果: 正文 使用方式同 ...

  5. H5实现多图片预览上传,可点击可拖拽控件介绍

    版权声明:欢迎转载,请注明出处:http://blog.csdn.net/weixin_36380516 在做图片上传时发现一个蛮好用的控件,支持多张图片同时上传,可以点击选择图片,也可以将图片拖拽到 ...

  6. jquery.uploadView 实现图片预览上传

    图片上传,网上有好多版本,今天也要做一个查了好多最终找到了一个uploadview 进行了一下修改 来看代码 @{ Layout = null; } <!DOCTYPE html> < ...

  7. js获取base64格式图片预览上传并用php保存到本地服务器指定文件夹

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  8. 原生js实现图片预览并上传

    最近主导的PC客户端网站重构工程告一段落,下一阶段开始给公司APP开发H5页面,技术栈是react.最近碰到一个需求:需要在H5页面上添加身份证照片,预览并上传.因为要兼容安卓4.4以下版本的手机,所 ...

  9. 浅谈简单实现file控件的图片预览,裁剪和上传。

    1.图片预览之FileReader对象    FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用File或Blob对象指定要读取的文件或数据 ...

随机推荐

  1. Java生鲜电商平台-你应该保留的一些学习态度与学习方法

    Java生鲜电商平台-你应该保留的一些学习态度与学习方法 说明:Java开源生鲜电商平台这一类学习课程系列已经初步接近了尾声,那么作为学习生鲜电商B2B2C电商的你,应该有一个什么样子的学习态度与学习 ...

  2. nRF24L01+如何检测信道被占用-RSSI寄存器实战分享

    检测信道占用的需求场景 在使用nRF24L01模块做一对多或多对一的组网通信中,大家都会担心一个问题就是在发送的时候,希望不要有其他的模块也进行发送,因为这样就会使无线信号发生碰撞,信道被堵塞,造成通 ...

  3. [b0031] python 归纳 (十六)_线程同步_锁

    # -*- coding: utf-8 -*- """ 学习 多线程同步 使用锁 threading.Lock() 逻辑: 2 个线程,操作同一个整型变量,一个加法,另外 ...

  4. [b0002] Hadoop HDFS cmd常用命令练手

    目的: 学会HDFS CLI 常用操作 环境: Hadoop 2.6.4 伪分布式版 环境搭建参考本博客前篇文章: 伪分布式 hadoop 2.6.4 帮助: hadoop@ssmaster:~$ h ...

  5. 记录MySql错误消息

    本章列出了当你用任何主机语言调用MySQL时可能出现的错误.首先列出了服务器错误消息.其次列出了客户端程序消息. B.. 服务器错误代码和消息 服务器错误信息来自下述源文件: · 错误消息信息列在sh ...

  6. 源码包安装转换rpm包

    目录 纯净版虚拟机 1. 先安装个虚拟机,登陆nginx官网 http://nginx.org/选择一个稳定的版本 2. 右键复制地址,到新克隆的纯净虚拟机wget 下载 3.源码包 4.解压 tar ...

  7. HIVE SQL产生的文件数量及参数调优

    产生背景:sqoop抽取oracle数据到hive表时,只能写入到固定分区(--hive-partition-key #hive分区字段 --hive-partition-value #hive分区值 ...

  8. 元祖,range,字典,结构,fromkeys的使用

    3.5.3 元祖 关键字 tuple tu=(1,2,3,'你好',True) print(tu) 元祖是有序,不可变数据,不能进行修改, 支持索引查看 存储一些比较重要的信息,在配置文件中使用 存放 ...

  9. Jmeter之命令行生成HTML报告

    其实每次使用jemter.bat文件启动JMeter时,命令行窗口都会提示我们不要使用GUI窗口进行测试,除非是进行调试脚本 使用命令行生成结果也很测试报告也很简单 jmeter -n -t [jmx ...

  10. XposedInstaller 是如何安装的

    Launcher 如何通过startActivity 传送一个 intent 到 zygote 如何 接收到它并且 fork出该app的进程的? 安装框架的时候会现有各种检查,比如当前系统版本等 下载 ...