Smartupload文件上传&CKEditor富文本编辑器

  1. Smartupload文件上传
  2. CKEditor富文本编辑器

smartupload图片上传下载插件百度网盘地址:https://pan.baidu.com/s/1yfhzPpXA74kOGnCbckU4sQ
提取码:e8h8

CKEditor富文本编辑器:链接:https://pan.baidu.com/s/1aVBW7N0tW9S8F1Uzut2oeg
提取码:gk6t

========================================
一:通过CKeditor富文本编辑器完成的效果图:
在这里插入图片描述
二:通过smartupload完成的图片上传与展示效果图:
在这里插入图片描述

1.使用第三方上传插件:smartUpload
2.明确:
a.数据库表中的列中存的是文件路径;
图片也要传到服务器上(将本地文件传到服务器项目中,然后将路径存入表字段中)
3.步骤:
第一:在项目中导入jspsmartupload.jar文件包
第二:在表单中添加表单属性:enctype=“multipart/form-data”
第三:了解file类与smartupload类中的方法

======================================================

表单必须用enctype属性进行封装:

//表示表单将按照二进制的方式提交
代码如下:

<form action="doadd.jsp" enctype="multipart/form-data" method="post" id="myform"></form>

smartupload里面的file类方法:
在这里插入图片描述
smartupload里面的files类方法:
在这里插入图片描述
smartupload类方法:
在这里插入图片描述

在使用smartUpload时必须严格按照如上程序进行:
SmartUpload smart=new SmartUpload(); //实例化SmartUpload上传组件
smart.initialize(pageContext); //初始化上传操作
smart.upload(); //上传准备
smart.save(“upload”); //将上传文件保存在upload文件夹中

2.限制文件的上传类型
允许上传类型:
samrt.setAllowedFilesList(“gif,jpg,doc,rar”);
不允许上传类型:
samrt.setDeniedFilesList(“jsp,asp,php,aspx”);

3.限制文件上传的大小
smart.setMaxFileSize(210241024);

4.设置字符编码
smart.setCharset(“utf-8”);
//设置字符编码(如果未设,当请求中含有中文时会报:java.lang.NullPointerException: charsetName),准备上传

5.混合表单
当一个表单使用了enctype封装后,其他的非文件类的表单控件的内容就无法通过request内置对象取得,此时必须通过SmartUpload类中提供的getRequest()方法取得全部的请求参数。

String uname=smart.getRequest().getParameter("uname");
注意:该句代码一定要在执行完upload()方法之后才可以使用

完整代码如下:

<%@page import="com.jspsmart.upload.Request"%>
<%@page import="com.jspsmart.upload.File"%>
<%@page import="com.jspsmart.upload.SmartUpload"%>
<%@page import="com.zking.Dao.XwDao"%>
<%@page import="java.util.Date"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="oracle.jdbc.driver.OracleDriver"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//实现对象
	SmartUpload su=new SmartUpload();
	//初始化
	su.initialize(pageContext);
	
	//限制文件
	su.setDeniedFilesList("mp4,mp3,mav");
	//设置编码方式
	su.setCharset("utf-8");
	su.upload();
	//得到file文件
	File file=su.getFiles().getFile(0);
	//设置存储图片的位置
	String path="upload\\";
	if(!file.isMissing()){
		file.setCharset("utf-8");
		path+=file.getFileName();
	}
	//文件保存
	file.saveAs(path, SmartUpload.SAVE_VIRTUAL);
	//通过smartupload的request得到form表单里面的其他的文本框的值,注意request为smartupload里面的,本来的request方法无法接收
	Request r=su.getRequest();







//这里存储到数据库
//OracleDriver
Date d=new Date();
String tname=r.getParameter("ntid");
String nname=r.getParameter("ntitle");
String nzz=r.getParameter("nauthor");
String nzy=r.getParameter("nsummary");
String nny=r.getParameter("ncontent");
String images=path;
XwDao xd=new XwDao();
int n=xd.addxw(tname, nname, nzz, nzy, nny, d.toLocaleString(),images);

if(n>0){
	out.print("<script>alert('提交成功')</script>");
}else{
	out.print("<script>alert('提交失败')</script>");
}

%>

6.为上传文件自动命名
如果多个用户上传的文件名称一样,则肯定会发生覆盖的情况,为了避免这类问题,可以采用为上传文件自动命名的方式。为防止重名,自动命名可以采用如下的格式:

IP地址 + 时间戳 + 三位随机数

public String getIPTimeRand(){

    //实例化StringBuffer对象,用来做文件名拼接
    StringBuffer buf=new StringBuffer();
    
    //获得本机的IP地址
    InetAddress addr = InetAddress.getLocalHost();
    ip=addr.getHostAddress().toString;//获得本机IP
    address=addr.getHostName()toString;//获得本机名称 
    
    //获得当前时间戳
    SimpleDateFormat date=new SimpleDateFormat("yyyyMMddHHmmssSSS");
    date.format(new Date());

    //获得一个3位数的随机数
    Random r=new Random();
    for(int i=0; i<3; i)
	buf.append(r.nextInt(10));
    }
    
    return buf;
}

文件名得到了,我们需要得到上传文件的后缀名:getFileExt()



a. 得到上传文件名:
String file=smart.getFiles().getFile(0).getFileName();
//获得第一个上传文件

b. 得到上传文件的后缀名:
String ext=smart.getFiles().getFile(0).getFileExt();
//获得第一个上传文件的文件后缀

c. 拼凑文件名:
String fileName=getIPTimeRand()+"."+ext;


d. 由于此时要用新的文件名称保存上传文件,所以要通过smart.getFiles().getFile(0).saveAs()方法进行手工保存。具体代码:

smart.getFiles().getFile(0).saveAs(getServletContext().getRealPath("/")+"upload"+java.io.File.separator+fileName);


//file.saveAs(路径,上传方式);

7.批量上传
如要完成批量上传,则肯定需要循环的方式进行,那么就必须通过如下方法取得上传文件数量。

smart.getFiles().getCount();
表单代码:
<form action="smartupload.jsp" method="post" enctype="multipart/form-data">
    文件1:<input type="file" name="pic1"><br/>
    文件2:<input type="file" name="pic2"><br/>
    文件3:<input type="file" name="pic3"><br/>
    <input type="submit" value="上传" >
    <input type="reset" value="重置">
</form>



smartupload.jsp代码:
<%
SmartUpload smart=new SmartUpload();
smart.initialize(pageContext);
smart.upload();
for(int i=0; i<smart.getFiles().getCount(); i++){
    smart.save("upload");
}
%>

================================================================
关于在servlet中写smartupload的问题:

如果fckeditor在servlet中怎么写?使用了JspFactory.getDefaultFactory()方法
<要注意抛异常>。

PageContext context = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8*1024, true);

一共七个参数:
第一个参数是传递一个Servlet,在servlet中传递this就可以了;
第二个和第三个参数是request与response不多说明了;
第四个参数是发生错误后的url路径地址,如果没有可以键入null;
第五个参数是是否需要session,这里可以写入true;
第六个参数是缓存大小,我用了8*1024,也可以用JspWriter.DEFAULT_BUFFER;
第七个参数是是否需要刷新,键入ture;
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值