springmvc spring mybatis 文件上传

Java代码 改代码借鉴其他博客的代码   大同小异  如果你在显示图片时报错误  错误在Client client = Client.create()这句话本没有错  报错原因是因为我的jdk是1.8  
而jery架包的版本是1.18.1之后换成1.18.2 就不再报错
此代码你可以划分为几大部分 
第一步  从请求体request中把相应的文件获取到  
第二步 为了避免名称重复采用时间命名 也可以采用32位的哈希code方法生成  也可以打散目录也就是目录分层 
第三步 创建服务器由于资金有限  用本机做第二台服务器 
第四步 将相对路径和绝对路径返回到页面 

package com.cb.ssm.controller;

import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import com.cb.ssm.utils.Conmmons;
import com.sun.jersey.api.client.Client;

import com.sun.jersey.api.client.WebResource;


@Controller
@RequestMapping("/upload")
public class UploadController {


	@RequestMapping("uploadPic")
	public void uploadPic(HttpServletRequest request, String fileName,PrintWriter out){
		//将request转化为多部件请求对象
		MultipartHttpServletRequest mh = (MultipartHttpServletRequest) request;
		//根据文件名获取文件对象
		CommonsMultipartFile cmFile = (CommonsMultipartFile) mh.getFile(fileName);
		//获取文件流上传对象
		byte[] fileBytes = cmFile.getBytes();
		
		//避免文件名称在服务器上可能出现重复
		String newFileName = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
		newFileName = sdf.format(new Date());
		
		Random r = new Random();
		
		for(int i=0; i<3; i++){
			newFileName = newFileName + r.nextInt(10);
		}
		
		//获取文件 扩展名
		String kFileName = cmFile.getOriginalFilename();
		//获取文件后缀名
		String suffix = kFileName.substring(kFileName.lastIndexOf("."));
		System.out.println(kFileName+"  "+ suffix);
		System.out.println(newFileName);
		
		
		//创建jesy服务器,进行跨服务器上传
		Client client = Client.create();
		System.out.println("创建成功");
		//把文件关联到远程服务器
		WebResource resource = client.resource(Conmmons.PIC_HOST+"/upload/"+newFileName+suffix);
		//上传文件
		resource.put(String.class,fileBytes);
		
		System.out.println("文件已上传");
		
		
		
		//ajax回调函数显示
		//图片需要回写 : 需要图片的完整路径
		//数据库保存图片的相对路径
		String fullPath = Conmmons.PIC_HOST+"/upload/"+newFileName+suffix;
		//相对路径
		String relativePath = "/upload/"+newFileName+suffix;
		//{"":"","":""}
		String result = "{\"fullPath\":\""+fullPath+"\",\"relativePath\":\""+relativePath+"\"}";
		
		out.print(result);

	}
}







页面及时回写  此代码用的是别人的代码非原创  本文章只是想表达同样的代码可以出现不同的很多错误

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt"%>
<c:set var="picPath" value="http://127.0.0.1:8003/ssmImage"></c:set>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>修改商品信息</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.form.js"></script>

<script type="text/javascript">
function submitImgSize1Upload() {
	
	var option={
			type:'POST',
			url:'${pageContext.request.contextPath }/upload/uploadPic.do',
			dataType:'text',
			data:{
				fileName : 'imgSize1File'
			},
			success:function(data){
				
				//把json格式的字符串转换成json对象
				var jsonObj = $.parseJSON(data);
				
				//返回服务器图片路径,把图片路径设置给img标签
				$("#imgSize1ImgSrc").attr("src",jsonObj.fullPath);
				//数据库保存相对路径
				$("#imgSize1").val(jsonObj.relativePath);
			}
			
		};
	
	$("#itemForm").ajaxSubmit(option);
	
}
</script>
</head>
<body> 
<form id="itemForm" action="${pageContext.request.contextPath }/items/saveOrUpdate.do" method="post">
<input type="hidden" name="id" value="${item.id }"/>
修改商品信息:
<table width="100%" border=1>
<tr>
	<td>商品名称</td>
	<td><input type="text" name="name" value="${item.name }"/></td>
</tr>
<tr>
	<td>商品价格</td>
	<td><input type="text" name="price" value="${item.price }"/></td>
</tr>
<tr>
	<td>商品生产日期</td>
	<!--  -->
	<td><input type="text" name="createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
</tr>
<tr>
	<td>商品图片</td>
	<td>
		<p><label></label>
		<img id='imgSize1ImgSrc' src='${picPath }${item.pic }'  height="100" width="100" />
		<input type='file' id='imgSize1File' name='imgSize1File' class="file" οnchange='submitImgSize1Upload()' /><span class="pos" id="imgSize1FileSpan">请上传图片的大小不超过3MB</span>
        <input type='hidden' id='imgSize1' name='pic' value='' reg="^.+$" tip="亲!您忘记上传图片了。" />
		</p>
	</td>
</tr>
<tr>
	<td>商品简介</td>
	<td>
	<textarea rows="3" cols="30" name="detail">${item.detail }</textarea>
	</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="提交"/>
</td>
</tr>
</table>

</form>
</body>

</html>

springmvc.xml文件配置

<!--文件上传解析器  -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="10240000"></property>
	</bean>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值