html代码:
------------------添加--------------------------
accept="image/gif,image/jpeg,image/jpg,image/png"
使用这个可以让用户只能看到并上传图片
原本是这个accept="image/*"的,后来发现在Chrome浏览器上响应过慢,所以加上mime类型,避免全部匹配引起时的浏览器响应过慢问题
<input type="file" id="file" style="display:none;" onchange="filechange(event)">//修改,这里如果不用onchange,会出现一个小bug,当你提交后,图片只能变一次
<img src="" width="200px" height="200px" id="img-change">
<button id="btn">保存图片</button>
js代码:
//实现点击图片同时,触发type=file这个input
$("#img-change").click(function () {
$("#file").click();
})
当input发生改变时,如果有图片,则预览图片(这里只判断文件的改变,没判断图片)
/*$("#file").change(function (event) {*/
var filechange=function(event){
var files = event.target.files, file;
if (files && files.length > 0) {
// 获取目前上传的文件
file = files[0];// 文件大小校验的动作
if(file.size > 1024 * 1024 * 2) {
alert('图片大小不能超过 2MB!');
return false;
}
// 获取 window 的 URL 工具
var URL = window.URL || window.webkitURL;
// 通过 file 生成目标 url
var imgURL = URL.createObjectURL(file);
//用attr将img的src属性改成获得的url
$("#img-change").attr("src",imgURL);
// 使用下面这句可以在内存中释放对此 url 的伺服,跑了之后那个 URL 就无效了
// URL.revokeObjectURL(imgURL);
}
};

接下来实现当点击按钮时,通过jquey的一个插件ajaxupload来进行上传图片,

代码如下:

$("#btn").click(function () {
$.ajaxFileUpload({
url: '/imgUpload',
fileElementId:'file',
dataType:'txt',
secureuri : false,
success: function (data){
if(data=="yes"){
$("#img-alert").css("display","block");
}
},
error:function(data,status,e){
alert(e);
}
});
});

接下来是后台代码,我的后台是spring mvc框架,我没试过不用spring mvc的框架,但最多在拦截时不同,得到后,在文件处理那块是一样的

@RequestMapping(value = "/imgUpload")
@ResponseBody
public synchronized String imgUpload(@RequestParam("file") MultipartFile file,HttpServletRequest request) throws IOException {
String tishi="no";
System.out.println("arrive here");
if(!file.isEmpty()) {
//System.out.println(file.getOriginalFilename());
String message = System.currentTimeMillis() + file.getOriginalFilename();//现在的文件名是时间戳加原文件名,出现图片相同时,读取不出来的bug
String realPath = request.getSession().getServletContext().getRealPath("/upload/");//将文件保存在当前工程下的一个upload文件
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(realPath, message));//将文件的输入流输出到一个新的文件
message="upload/"+message;
HttpSession session=request.getSession();
Integer id=(Integer)session.getAttribute("userid");//在session中获得用户id
User user=userService.get(id);//在dao层保存数据,也就是图片的地址
user.setPhoto(message);
userService.update(user);
tishi="yes";//返回yes,表示存储成功,可以使用try,catch来捕捉错误,这里偷懒不用
}
return tishi;
}

  还有一点,还需再spring mvc框架下配置文件

<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<property name="maxUploadSize" value="1048576000" />
<property name="maxInMemorySize" value="40960000" />
</bean>

  

html选择图片后预览,保存并上传的更多相关文章

  1. js实现FileUpload选择图片后预览功能

    当asp.net的FileUpload选择一个图片后不需要上传就能显示出图片的预览功能, 代码: <%@ Page Language="C#" AutoEventWireup ...

  2. input file选择图片后 预览

    很多前端都选择用插件来实现图片预览,这个小功能也可以很简单的用jQuery来实现 简单的jQuery实现input file选择图片后,可以预览图片的效果 简单的HTML代码: <div> ...

  3. type="file" 选择图片后预览

    function setImagePreview(avalue) { var docObj = document.getElementById("doc"); var imgObj ...

  4. Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等

    仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...

  5. Input File选择图片后,未保存预览

    今天实现上传图片到服务器 简单的jQuery实现input file选择图片后,可以预览图片的效果 简单的HTML代码: <div> <img src="" cl ...

  6. 移动端 H5 拍照 从手机选择图片,移动端预览,图片压缩,图片预览,再上传服务器

    前言:最近公司的项目在做全网营销,要做非微信浏览器的wap 站 的改版,其中涉及到的一点技术就是采用H5 选择手机相册中的图片,或者拍照,再将获取的图片进行压缩之后上传. 这个功能模块主要有这5点比较 ...

  7. 巧用weui.gallery(),点击图片后预览图片

    要在页面需要加载的JS文件: <script src="../js/libs/weui.min.js"></script> 可以去weui的文档中下载,这是 ...

  8. Android图片上传,可以选择多张图片,缩放预览,拍照上传等

    仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...

  9. jQuery + ashx 实现图片按比例预览、异步上传及显示

    目录(?)[-] 注ajax 方式异步读取数据库显示图片的方法同上传一致使用 ashx 返回base64字符串在客户端处理即可 记录一个让我纠结良久的问题 在Page_Load 函数中只有第一个用 S ...

随机推荐

  1. 003-Tuple、Array、Map与文件操作入门实战

    003-Tuple.Array.Map与文件操作入门实战 Tuple 各个元素可以类型不同 注意索引的方式 下标从1开始 灵活 Array 注意for循环的until用法 数组的索引方式 上面的for ...

  2. c++虚函数和内联构造函数

    创建一个含有虚函数的对象时, 编译器会实现 "初始化其VPTR以指向相应的VTABLE" 这个操作 ,而实现这个操作是通过 "插入隐藏代码至构造函数中" 故此时 ...

  3. lightoj1348

    //Accepted 6004 KB 924 ms /* source: lightoj1348 time :2015.5.29 by :songt */ /*题解: 树链剖分 */ #include ...

  4. C#导入Excel遇到数字字母混合列数据丢失解决

    错误重现: ----------------------------------------------------------------------- 在导入Excel读取数据时,其中的一个字段保 ...

  5. python基础之内置函数

    该博客内容参考http://www.cnblogs.com/wupeiqi/articles/4943406.html 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经 ...

  6. JMS links

    http://yuxisanren.iteye.com/blog/1912587 http://somebody-hjh.iteye.com/blog/726050 http://docs.oracl ...

  7. 用户新加入Group

    Linux中一个user可以加入多个分组 以下以用户holmes为例,原始用户组为holmes,新加入用户组users 首先进入root模式 [holmes@KirCentOS share]$ su ...

  8. HDU 5441 离线处理 + 并查集

    题意:给n个节点m条带权值边的无向图.然后q个问题,每次询问点对的数目,点对需要满足的条件是:1)连通:2)其路径的最大权值不能超过询问值. 分析:如果没次询问一次,dfs一次,很可能超时,因此可以用 ...

  9. 信号量与PV操作

    在计算机操作系统中,PV操作是进程管理中的难点.首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:    P(S):①将信号量S的 ...

  10. LVM逻辑卷的创建及使用

    在上一篇随笔里面 LVM逻辑卷基本概念及LVM的工作原理,详细的讲解了Linux的动态磁盘管理LVM逻辑卷的基本概念以及LVM的工作原理,包括LVM中最重要的四个基本点(PE.PV.VG以及LV),这 ...