該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
【1】視圖層
action="${ctx}/web/UserInforServlet?method=userInforServlet" >
更換頭像
立即提交
重置
var layer,upload,form;
//1-頁面數據加載
$(function () {
//【1】加載&初始化layui模塊-彈出層與table數據表格
layui.use(["layer", "upload","form"], function () {
layer = layui.layer;
laydate=layui.laydate;
upload = layui.upload;//layui的上傳
form= layui.form;
uploadImage();
});
});
function uploadImage(){
var $ = layui.jquery;
upload.render({
elem: "#upImage"
,auto: false
,size:1024
,choose: function(obj){//使用choose選擇文件后的回調函數
//預讀本地文件示例,不支持ie8
obj.preview(function(index, file, result){
$("#userImge").attr("src",result); //圖片鏈接(base64)
});
}
});
}
//提交form表單
$("#saveUserInfor").click(function(){
$("#frregister").ajaxSubmit(function(data) {
if(data="1"){
layer.msg("成功!");
}
});
});
【2】控制器
publicvoid userInforServlet(HttpServletRequest request,HttpServletResponseresponse) throws IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");//處理響應編碼
Map map=new HashMap();
UserDetail userDetail=new UserDetail();
try {
//【1】解析數據
DiskFileItemFactory fac=new DiskFileItemFactory();
int sizeThreshold=1024*1024*10; //10MB
fac.setSizeThreshold(sizeThreshold);
fac.setRepository(new File(System.getProperty("java.io.tmpdir")));
ServletFileUpload upload=new ServletFileUpload(fac);//文件上傳解析器
upload.setHeaderEncoding("utf-8");
Listlist=upload.parseRequest(request);
//【2】遍歷集合
for(FileItem item :list){
//1)如果當前FileItem對象是普通項
if(item.isFormField()){
map.put(item.getFieldName(),item.getString());
}else{
//1)如果當前FileItem對象是上傳項
//2)判斷是否存在有該文件夾
String realPath=("D:/Mytouimage");
File uploadMkdir=new File(realPath);
if(!uploadMkdir.exists()){
uploadMkdir.mkdir();
}
//如果fileitem中封裝的是上傳文件,得到上傳的文件名稱,
String fileName = item.getName();//上傳文件的名
//多個文件上傳時,沒有上傳內容的問題異常處理
if(fileName==null||"".equals(fileName.trim())){ continue;
}
fileName =fileName.substring(fileName.lastIndexOf("\\")+1);
InputStream is=item.getInputStream();
File file=new File(realPath+"/"+fileName);
//3)先在本地存儲圖片,再讀取保存到數據庫
if(!file.isDirectory()){
userDetail.setImageName(realPath+"/"+item.getName());
OutputStream os=new FileOutputStream(file);
//IOUtils拷貝流
IOUtils.copy(is,os);
//關閉資源
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(os);
item.delete();//刪除處理文件上傳時生成的臨時文件
}
}
}
BeanUtils.populate(userDetail,map);
int flag =ids.insert(userDetail);
if(flag==1){
response.getWriter().write("1");
response.getWriter().close();
}
}
【3】dao層
@Override
publicint insert(UserDetail t) {
int flag=0;
InputStream fis=null;
String insert="INSERT INTOr_userdetail(userImage,imageName)" +
"VALUES(?,?);";
try {
con=JDBCUtil.getConnection();
ps=con.prepareStatement(insert);
if(t.getImageName()!=null){
//讀取本地圖片
fis=new FileInputStream(t.getImageName());
}
//將流寫入Mysql
ps.setBinaryStream(1, fis, fis.available());
ps.setString(2, t.getImageName());
flag=ps.executeUpdate();
} catch (SQLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
catch (FileNotFoundException e){
//TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
【4】po層
publicclass UserDetail implements Serializable{
publicstaticfinallongserialVersionUID = 42L;
privateintuserDetailID;
private Blob userImage;
private String imageName;
public Blob getUserImage() {
returnuserImage;
}
publicvoid setUserImage(Blob userImage) {
this.userImage = userImage;
}
public String getImageName() {
returnimageName;
}
publicvoid setImageName(String imageName) {
this.imageName = imageName;
}
}
【5】總結
1)注意上傳圖片是form表單一定要加method="post" enctype="multipart/form-data" ,否則無法將數據上傳到服務器。
2)Mysql存儲圖片的數據類型
TinyBlob最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
3)在dao層向數據庫添加數據
使用ps.setBinaryStream(1,fis, fis.available());
【6】顯示圖片
publicvoid selectUserImage(HttpServletRequest request, HttpServletResponseresponse) {
String id=request.getParameter("userID");
if(id!=null){
int userID=Integer.parseInt(id);
UserDetail userDetail=ids.findByUserid(userID);
BufferedOutputStream bufos=null;
BufferedInputStream bufis=null;;
try {
if(userDetail.getUserImage()!=null){
//讀取緩沖區 userDetail.getUserImage().getBinaryStream()--讀取源
bufis=new BufferedInputStream(userDetail.getUserImage().getBinaryStream());
//輸出緩沖區 response.getOutputStream()--輸出目的
bufos = new BufferedOutputStream(response.getOutputStream());
byte[] bt=newbyte[1024];
//【6】初始化實際長度的數組的長度
int count=0;
//【7】循環讀取多媒體文件數據,將其讀取的數據存儲在byte數組
while((count=bufis.read(bt))!=-1){
//【8】截取數組從零到實際長度,循環寫入多媒體的目標文件
bufos.write(bt,0,count);
}
}
bufis.close();
bufos.close();
} catch (SQLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}