图片预览上传

框架:Struts2、Spring、MyBatis

需求简介:

[新建页面] 可添加多张图片,只显示一张,添加后显示在页面列表中,可删除,可切换预览。

[编辑页面] 功能同上。

页面设计:

预览图

xxxxx1.jpg 删除

xxxxx2.jpg 删除

添加文件

技术点:

1. 本地图片上传后在jsp页面中预览。js

2.服务器读硬盘文件,显示到jsp。java

3.jsp提交包含文件表单不刷新。easyUI

---------------------------------------------------割不割-----------------------------------------------------------

1. 关键字: FileReader

  • INPUT type=file 元素
  • 必须为 INPUT type=file 元素指定NAME 标签属性的值。
  • FORM 元素 METHOD 标签属性的值必须设置为post。
  • FORM 元素 ENCTYPE 标签属性的值必须设置为multipart/form-data。
//要处理上载到服务器的文件,服务器端进程必须可以处理 multipart/form-data 的提交。
//标签属性 value 当文本通过用户输入设置后获取 input 对象的文件名。
//C:\Documents and Settings\Administrator\My Documents\My Pictures\ak.jpg
//obj.value 为 C:\fakepath\ak.jpg  虚假路径,文件名正确。
<form name="myform" action="post.do" enctype="multipart/form-data" method="post">
<input type="file" name="file1"/>
<input type="submit" value="上传文件">
</form>
var reader = new FileReader();
 reader.onload = function(e){
                    document.getElementById(imgPreviewId).setAttribute("src",e.target.result);
                }
reader.readAsDataURL(fileObj.files[0]);
解读file:
obj.file // undefined
obj.files // [object FileList]
obj.files[0] //[object File]
// 一个input支持多个文件
obj.files[0] 包含的信息:
webkitRelativePath:
lastModifiedDate:Fri Jan 16 2015 16:38:56 GMT+0800 (中国标准时间)
name:a1.png
type:image/png
size:7144
slice:function slice() { [native code] }

2.jsp img 标签设置
<img src="showPic.do" /> 

3. struts.xml 文件配置

<result name="pic" type="stream">
    <param name="inputName">inputStream</param>
    <param name="contentType">image/jpeg</param>
    <param name="bufferSize">2048*2048</param>
</result> 

附:result-types

<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>  

4. java action配置

InputStream inputStream;
getter ...
setter ...

public showPic (){
inputstream = ...
return "pic"
}

5. 让表单(form)成为 ajax 提交的表单(form)

easyUI 插件 Form表单

http://www.jeasyui.net/plugins/166.html

var options = {
            success: function (dataStr){
                    ...
                }
        }
$("#myform").form("submit",options);// 此处options 为json

如返回jsonString  可通过 eval(‘(‘ + dataStr + ‘)‘); 转为json对象

6.关键字:Array

var fileNameArray = new Array();

push(fileName); // 添加元素

pop();//弹出最右一个,即顶部,看作桶,有底

shift(); // 移除数组第一个元素

var array = new Array();
array.push(1);
array.push(2);
array.push(3);
array.pop();
alert(array.join(",")); // 1,2
var array = new Array();
array.push(1);
array.push(2);
array.push(3);
array.shift();
alert(array.join(",")); //2,3

移除元素N

var array = new Array();
array.push("a");
array.push("b");
array.push("c");
array.push("d");
array.splice(array.indexOf("b"),1);
alert(array.join(",")); //a,c,d 
var array = new Array();
array.push("a");
array.push("b");
array.push("c");
array.push("d");
array.pop();
array.shift();
alert(array.length); //2

7.关键字:file

java.io.File file = ...;
file.length(); //long 文件大小
File file = new File(filePath);
// 删除返回true ,再次删除返回false,目标文件不存在(路径存在new、file不存在)返回false
file.delete();

//文件删除

// 1.已存在文件夹: old
// 2.目标文件夹: new
// 3.mkdir :创建最右单个文件夹,只一个new
// 4.mkdirs:依次创建多个文件夹
// 5.只要有一个new被创建则返回true
// 6.二次执行 mkdir or mkdirs 时,返回false,不创建文件夹。
// 7.mkdir or mkdirs 不能创建file.txt文本文件 ,会生成名为file.txt 的文件夹
// 8.1.方法createNewFile会抛出io异常
// 例如:包含非法字符时:文件名、目录名或卷标语法不正确。
// 例如:路径中存在new时:系统找不到指定的路径。
// 8.2方法createNewFile 二次执行时,返回false,不创建文件。
//----------------------------

File d1 = new File("D:\\old\\new\\new");
d1.mkdir();
// return false 未创建
File d2 = new File("D:\\old\\new\\new");
d2.mkdirs();
// return true 创建成功
File d3 = new File("D:\\old\\new");
d3.mkdir();
// return true 创建成功
File f1 = new File("D:\\old\\new.txt");
try { f1.createNewFile();} catch (IOException e) { e.printStackTrace();}
   /**
     * File -> byte[]
     *
     * @param file
     */
    public byte[] file2ByteArray(File file) throws FileNotFoundException,IOException {

        byte[] buf = null;
        FileInputStream fis = null;
        ByteArrayOutputStream baos = null;
        try {
            fis = new FileInputStream(file);
            baos = new ByteArrayOutputStream(1024 * 1024);
            byte[] b = new byte[1024 * 1024];
            int l;
            while ((l = fis.read(b)) != -1) {
                baos.write(b, 0, l);
            }
            baos.flush();
            buf = baos.toByteArray();
        } catch (FileNotFoundException e) {
            //logger.info("文件[" + file + "]未找到!");
            throw e;
        } catch (IOException e) {
            //logger.info("文件[" + file + "]读写错误!" + e.getMessage());
            throw e;
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
                if (baos != null) {
                    baos.close();
                }
            } catch (IOException e) {
                throw e;
            }
        }
        return buf;
    }
   /**
     *
     * @param filePath  \\user\     * @param fileName  file.jpg
     * @param byteArray
     * */
    public String fileWrite(String filePath, String fileName, byte[] byteArray) {

        // 目标文件夹
        File dir = new File(filePath);
        // 创建文件夹
        dir.mkdirs();

        String f = filePath + File.separator + fileName;
        // 目标文件
        File file = new File(f);

        // 如果文件存在返回
        if (file.exists()) {
            return "文件["+f+"]已存在";
            // or
            // file.delete();
        }
        // 文件输出流
        FileOutputStream fos = null;
        try {
            // 输出目标
            fos = new FileOutputStream(filePath + File.separator + fileName);
            // 输出
            fos.write(byteArray);
            fos.flush();
        } catch (FileNotFoundException e) {
            return "文件["+f+"]未找到";
        } catch (IOException e) {
            return "文件["+f+"]读写错误";
        } finally {
            try {
                // 关闭
                if(fos!=null){
                    fos.close();
                }
            } catch (IOException e) {
                return "文件输出流关闭时异常";
            }
        }
        return null;
    }

// 文件复制

fileWrite("D:\\old","new.png",file2ByteArray(new File("D:\\old\\old.png")));

// 文件分割符

//linux  读取文件如果路径中存在反斜杠 \\ ,会不能正常读取。

File.separator

Linux下为 /

Windows 下为 \

 
时间: 2024-12-29 01:20:22

图片预览上传的相关文章

PHP仿微信多图片预览上传功能

PHP仿微信多图片预览下载演示地址:http://www.erdangjiade.com/js...生产图片区域,上传按钮#btn可替换自己想要的图片 [html] view plain copy在CODE上查看代码片派生到我的代码片 <ul id="ul_pics" class="ul_pics clearfix"> <li><img src="logo.png" id="btn" class=

PHP仿微信多图片预览上传

本文演示了手机微信端常用的多图片上传及时预览功能,点击上传的图片可立即删除.若是需要制作其他功能的或者修改样式的,请联系群主.比如拖拽.旋转或放大功能. 多图片上传演示地址: http://www.sucaihuo.com/js/830.html

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

项目中需要用到多图片上传功能,于是在百度搜了一下,首先使用了kissy uploader,是由阿里前端工程师们发起创建的一个开源 JS 框架中的一个上传组件...但,后面问题出现了. 在对添加的信息进行重新编辑的时候,这些图片怎么办?由于对js不是很熟悉,就没有想去修改这个组件的代码.只有重新寻找合适的组件,于是就找到了百度的WebUploader,下面简要描述一下该组件在MVC中的使用,包括图片的上传和预览,以及在编辑界面对图片的处理办法. 先来一张效果图: (一)图片的上传和预览 (1)下载

jquery.uploadView 实现图片预览上传

图片上传,网上有好多版本,今天也要做一个查了好多最终找到了一个uploadview 进行了一下修改 来看代码 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src=&quo

html 图片预览上传(支持ie,google,火狐)

//说明:图片上传预览插件 //上传的时候可以生成固定宽高范围内的等比例缩放图 //参数设置: //width                     存放图片固定大小容器的宽 //height                    存放图片固定大小容器的高 //imgShow                    页面DIV的JQuery的id //maxSize                   图片大小最大限制(K) //imgType                   数组后缀名 /

JS代码实用代码实例(输入框监听,点击显示点击其他地方消失,文件本地预览上传)

前段时间写前端,遇到一些模块非常有用,总结以备后用 一.input框字数监听 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="text" name="wxChoi

bootstrap图片剪裁预览上传

效果图预览: 用到的图片剪裁插件:http://www.htmleaf.com/jQuery/Image-Effects/201504211716.html 前段ui框架:bootstrap3 java后端框架:spring + mybstis 说明:如果前端ui用的不是bootstrap的框架,则调过第一步,直接将第二步的页面地址作为弹出框的地址即可,然后在做修改 1.首先说一下bootstrap的模态框: 一般的打开模态框要在页面上隐藏一段html代码然后用$("#Id").mod

MUI 单个图片上传预览(拍照+系统相册):先选择-&gt;预览-&gt;上传提交

1 html部分 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link href="../css/mui.min.css" rel="stylesheet" /> <script src="../js/mui.min.js"></s

php实现头像预览上传功能

最近在做php第二阶段的项目,需要用到头像上传的功能 我们要完成头像上传功能,一共要写两个php页面,第一个页面我们叫做touxiang.php,第二个页面我们叫做upload.php 1.touxiang.php 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&g