最新问题是旧问题的结合小姐姐快来

最新问题是旧问题的结合小姐姐快来

@RequestMapping(value="/addproduct" ,method=RequestMethod.POST)

@ResponseBody

public Map<String,Object> addProduct(HttpServletRequest request){

Map<String,Object> modelMap = new HashMap<String,Object>();

//验证码校正

if(!CodeUtil.checkVerifyCode(request)) {

modelMap.put("success", false);

modelMap.put("errMsg", "请输入验证码");

}

//1.获取前台传来的普通参数

String productStr = HttpServletRequestUtil.getString(request, "productStr");

ObjectMapper mapper = new ObjectMapper();

Product product = null;

try {

product = mapper.readValue(productStr, Product.class);

}catch(Exception e) {

modelMap.put("success", false);

modelMap.put("errMsg", e.getMessage());

return modelMap;

}

//2.判断有没有文件流没有就返回错

List<ImageHolder> productImageList = new ArrayList<ImageHolder>();

ImageHolder thumbnail = null;

CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(

request.getSession().getServletContext());

//若请求中存在文件流,则取出相关的文件

try {

if (commonsMultipartResolver.isMultipart(request)) {

//获取缩略图

thumbnail = addImageHolder(thumbnail,productImageList,request);

} else {

modelMap.put("success", false);

modelMap.put("errMsg", "上传图片不能为空");

return modelMap;

} catch (Exception e) {

modelMap.put("success", false);

modelMap.put("errMsg", e.toString());

}

//3.添加处理商品信息

if(product != null && thumbnail != null && productImageList.size()>0) {

try {

Shop currentShop = (Shop) request.getSession().getAttribute("currentShop");

product.setShop(currentShop);

ProductExecution pe = productService.addProduct(product, thumbnail, productImageList);

if (pe.getState() == ProductStateEnum.SUCCESS.getState()) {

modelMap.put("success", true);

} else {

modelMap.put("success", false);

modelMap.put("errMsg", pe.getStateInfo());

} catch (ProductOperationException e) {

modelMap.put("success", false);

modelMap.put("errMsg",e.toString());

    return modelMap;

}

}else {

modelMap.put("success", false);

modelMap.put("errMsg","请输入商品信息");

}

return modelMap;

}

private ImageHolder addImageHolder(ImageHolder thumbnail, List<ImageHolder> productImageList,

HttpServletRequest request) throws IOException {

MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;

CommonsMultipartFile thumbnailFile = (CommonsMultipartFile) multipartHttpServletRequest

.getFile("thumbnail");

//构建缩略图文件流和名字的对象

thumbnail = new ImageHolder(thumbnailFile.getOriginalFilename(),

thumbnailFile.getInputStream());

//获取详情图

for (int i = 0; i < IMAGMAXCOUNT; i++) {

CommonsMultipartFile productFile = (CommonsMultipartFile) multipartHttpServletRequest

.getFile("froductImg" + i);

if (productFile != null) {

ImageHolder productImg = new ImageHolder(productFile.getOriginalFilename(),

productFile.getInputStream());

//添加详情图进List

productImageList.add(productImg);

} else {

//若取出的第i个详情图片文件流为空,则终止循环

break;

}

}


return thumbnail;

}



/**

 * 

 */

$(function(){

var productId = getQueryString("productId");

var isEdit = productId ? true : false;

//编辑商品 

var editProductUrl = '/o2o/shopadmin/modifyproduct';

//添加商品

var addProductUrl = '/o2o/shopadmin/addproduct';

//拿到所属商品的分类 用来添加和更新

var productCategoryUrl = '/o2o/shopadmin/getproductcategory';

//根据id查找商品 用来更新

var queryProductByIdUrl = '/o2o/shopadmin/getproductbyid?productId='+productId;

getproductCategory();

//根据ID获取店铺信息

function getqueryProductById(){

$.getJSON(queryProductByIdUrl,function(data){

if(data.success){

var product = data.product;

$('#priority').val(product.priority);

$('#product-name').val(product.productName);

$('#normal-price').val(product.normalPrice);

    $('#promotion-price').val(product.promotionPrice);

    $('#point').val(product.point);

    $('#product-desc').val(product.productDesc);

    //获取原来的商品以及该店铺的所有商品类别列表

    var optionHtml = '';

    var optionArr = data.productCategoryList;

    var optionSelected = product.productCategory.productCategoryId;

    //生成前端的HTML商品类别列表,并默认选择编辑前的商品列表

    optionArr.map(function(item,index){

    var isSelect = optionSelected === item.productCategoryId?'selected'

    : '';

    optionHtml +='<option data-value ="'

    +item.productCategoryId

    +'"'

    +isSelect

    +'>'

    +item.productCategoryName

    +'</option>';

    });

    $('#category').html(optionHtml);

}

});

}

//获取该商店下的分类

function getproductCategory(){

$.getJSON(productCategoryUrl,function(data){

if(data.success){

var tempHtml = '';

data.data.map(function(item,index){

tempHtml += '<option data-id="'+item.productCategoryId+'">'+

item.productCategoryName +'</option>';

});

$('#category').html(tempHtml);

}

});

}

// 针对商品详情图控件组,若该控件组的最后一个元素发生变化(即上传了图片),

// 且控件总数未达到6个,则生成新的一个文件上传控件

$('.detail-img-div').on('change','.detail-img:last-child',function(){

if($('.detail-img').length < 6){

$('#detail-img').append('<input type="file" class="detail-img">');

}

});

//拿到表单中信息并提交

$('#submit').click(function(){

var product ={};

if(isEdit){

product.productId = productId;

}

product.productName = $('#product-name').val();

product.productCategory = {

productCategoryId : $('#category').find('option').not(

function(){

return !this.selected;

}).data('id')

};

product.priority = $('#priority').val();

product.normalPrice = $('#normal-price').val();

product.promotionPrice = $('#promotion-price').val();

product.point = $('#point').val();

product.productDesc = $('#product-desc').val();

//获取缩略图文件流

var thumbnail = $('#small-img')[0].files[0];

var formData = new FormData();

formData.append('thumbnail',thumbnail);

formData.append('productStr',JSON.stringify(product));

// 遍历商品详情图控件,获取里面的文件流

$('.detail-img').map(function(index,item){

// 判断该控件是否已选择了文件

if($('.detail-img')[index].files.length > 0){

formData.append('froductImg'+index,

$('.detail-img')[index].files[0]);

}

});

var verifyCodeActual = $('#j_captcha').val();

if(!verifyCodeActual){

$.toast('请输入验证码');

return;

}

formData.append('verifyCodeActual',verifyCodeActual);

$.ajax({

url : (isEdit ? editProductUrl : addProductUrl),

type : 'POST',

data : formData,

contentType : false,

processData : false,

cache : false,

success : function(data){

if(data.success){

$.toast('提交成功');

}else{

$.toast('提交失败');

}

$('#captcha_img').cilck();

}

});

});

})



不行加了@ResponseBody也不行 而且我用的是Eclipse 怎么指定是应用指定的本地Tomcat的配置文件 刚刚又报了超时那个错

正在回答

登陆购买课程后可参与讨论,去登陆

9回答

同学你好。这边测试你的代码,是可以提示提交失败的:

http://img1.sycdn.imooc.com//climg/5d0627cf0001330c14670725.jpg

失败的原因是获取详情图失败,在执行addImageHolder方法时

http://img1.sycdn.imooc.com//climg/5d0629110001742712500401.jpg

http://img1.sycdn.imooc.com//climg/5d062bf00001740513790621.jpg

由于multipartHttpServletRequest
中存储的是productImg0所以得不到此productImageList

http://img1.sycdn.imooc.com//climg/5d0629350001cb0308220149.jpg

祝学习愉快~

  • 慕盖茨8087740 提问者 #1
    但是请问为什么添加是成功的?前台不提示啊
    2019-06-16 20:03:49
  • 慕盖茨8087740 提问者 #2
    我有点看不懂,有没有确定哪错的代码位置?正确怎么写?
    2019-06-16 20:06:36
  • 慕盖茨8087740 提问者 #3
    我有点看不懂,有没有确定哪错的代码位置?正确怎么写?
    2019-06-16 20:06:37
芝芝兰兰 2019-06-17 18:35:21

同学你好。这个报错

http://img1.sycdn.imooc.com//climg/5d076c6a0001611c06000213.jpg

实际的报错位置在这里

 http://img1.sycdn.imooc.com//climg/5d076c8f000138e405990111.jpg

实质上是因为basePath中含有空格等特殊字符,在转码的时候会出现“乱码”。比如这里我的路径有空格,就被解析为了“%20”

有两种解决方式,一是使用URLDecoder.decode(basePath,”UTF-8”);但实测这种不能解决“+”等运算符

 http://img1.sycdn.imooc.com//climg/5d076cc600012a7306000123.jpg

建议使用下面这种,将basePath赋值处使用如下方式:

http://img1.sycdn.imooc.com//climg/5d076cd100018a1606000115.jpg

 

就可以解决EOF的问题了。

如果解答了同学的疑问,望采纳~

祝学习愉快~


  • 提问者 慕盖茨8087740 #1
    先谢谢小姐姐,明天测试下,还有那个js参数问题有没有解决
    2019-06-17 20:13:09
  • 芝芝兰兰 回复 提问者 慕盖茨8087740 #2
    js的问题基本可以确定是zepto的问题,在实际开发中,纯粹的js问题会有公司的前端工程师帮助你一起解决,在这里同学可以不必过于纠结。先跟随老师继续完成后面的课程。祝学习愉快~
    2019-06-17 20:15:46
提问者 慕盖茨8087740 2019-06-17 09:29:37

http://img1.sycdn.imooc.com//climg/5d06ecbd0001257f13630511.jpg

@RequestMapping(value="/addproduct" ,method=RequestMethod.POST)

@ResponseBody

public Map<String,Object> addProduct(HttpServletRequest request){

Map<String,Object> modelMap = new HashMap<String,Object>();

//验证码校正

if(!CodeUtil.checkVerifyCode(request)) {

modelMap.put("success", false);

modelMap.put("errMsg", "请输入验证码");

}

//1.获取前台传来的普通参数

String productStr = HttpServletRequestUtil.getString(request, "productStr");

ObjectMapper mapper = new ObjectMapper();

Product product = null;

try {

product = mapper.readValue(productStr, Product.class);

}catch(Exception e) {

modelMap.put("success", false);

modelMap.put("errMsg", e.getMessage());

return modelMap;

}

//2.判断有没有文件流没有就返回错

List<ImageHolder> productImageList = new ArrayList<ImageHolder>();

ImageHolder thumbnail = null;

CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(

request.getSession().getServletContext());

//若请求中存在文件流,则取出相关的文件

try {

if (commonsMultipartResolver.isMultipart(request)) {

//获取缩略图

thumbnail = addImageHolder(thumbnail,productImageList,request);

} else {

modelMap.put("success", false);

modelMap.put("errMsg", "上传图片不能为空");

return modelMap;

} catch (Exception e) {

modelMap.put("success", false);

modelMap.put("errMsg", e.toString());

return modelMap;

}

//3.添加处理商品信息

if(product != null && thumbnail != null && productImageList.size()>0) {

try {

Shop currentShop = (Shop) request.getSession().getAttribute("currentShop");

product.setShop(currentShop);

ProductExecution pe = productService.addProduct(product, thumbnail, productImageList);

if (pe.getState() == ProductStateEnum.SUCCESS.getState()) {

modelMap.put("success", true);

} else {

modelMap.put("success", false);

modelMap.put("errMsg", pe.getStateInfo());

return modelMap;

} catch (ProductOperationException e) {

modelMap.put("success", false);

modelMap.put("errMsg",e.toString());

    return modelMap;

}

}else {

modelMap.put("success", false);

modelMap.put("errMsg","请输入商品信息");

return modelMap;

}

}

private ImageHolder addImageHolder(ImageHolder thumbnail, List<ImageHolder> productImageList,

HttpServletRequest request) throws IOException {

MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;

CommonsMultipartFile thumbnailFile = (CommonsMultipartFile) multipartHttpServletRequest

.getFile("thumbnail");

//构建缩略图文件流和名字的对象

thumbnail = new ImageHolder(thumbnailFile.getOriginalFilename(),

thumbnailFile.getInputStream());

//获取详情图

for (int i = 0; i < IMAGMAXCOUNT; i++) {

CommonsMultipartFile productFile = (CommonsMultipartFile) multipartHttpServletRequest

.getFile("productImg" + i);

if (productFile != null) {

ImageHolder productImg = new ImageHolder(productFile.getOriginalFilename(),

productFile.getInputStream());

//添加详情图进List

productImageList.add(productImg);

} else {

//若取出的第i个详情图片文件流为空,则终止循环

break;

}

}


return thumbnail;

}

/**

 * 

 */

$(function(){

var productId = getQueryString("productId");

var isEdit = productId ? true : false;

//编辑商品 

var editProductUrl = '/o2o/shopadmin/modifyproduct';

//添加商品

var addProductUrl = '/o2o/shopadmin/addproduct';

//拿到所属商品的分类 用来添加和更新

var productCategoryUrl = '/o2o/shopadmin/getproductcategory';

//根据id查找商品 用来更新

var queryProductByIdUrl = '/o2o/shopadmin/getproductbyid?productId='+productId;

getproductCategory();

//根据ID获取店铺信息

function getqueryProductById(){

$.getJSON(queryProductByIdUrl,function(data){

if(data.success){

var product = data.product;

$('#priority').val(product.priority);

$('#product-name').val(product.productName);

$('#normal-price').val(product.normalPrice);

    $('#promotion-price').val(product.promotionPrice);

    $('#point').val(product.point);

    $('#product-desc').val(product.productDesc);

    //获取原来的商品以及该店铺的所有商品类别列表

    var optionHtml = '';

    var optionArr = data.productCategoryList;

    var optionSelected = product.productCategory.productCategoryId;

    //生成前端的HTML商品类别列表,并默认选择编辑前的商品列表

    optionArr.map(function(item,index){

    var isSelect = optionSelected === item.productCategoryId?'selected'

    : '';

    optionHtml +='<option data-value ="'

    +item.productCategoryId

    +'"'

    +isSelect

    +'>'

    +item.productCategoryName

    +'</option>';

    });

    $('#category').html(optionHtml);

}

});

}

//获取该商店下的分类

function getproductCategory(){

$.getJSON(productCategoryUrl,function(data){

if(data.success){

var tempHtml = '';

data.data.map(function(item,index){

tempHtml += '<option data-id="'+item.productCategoryId+'">'+

item.productCategoryName +'</option>';

});

$('#category').html(tempHtml);

}

});

}

// 针对商品详情图控件组,若该控件组的最后一个元素发生变化(即上传了图片),

// 且控件总数未达到6个,则生成新的一个文件上传控件

$('.detail-img-div').on('change','.detail-img:last-child',function(){

if($('.detail-img').length < 6){

$('#detail-img').append('<input type="file" class="detail-img">');

}

});

//拿到表单中信息并提交

$('#submit').click(function(){

var product ={};

if(isEdit){

product.productId = productId;

}

product.productName = $('#product-name').val();

product.productCategory = {

productCategoryId : $('#category').find('option').not(

function(){

return !this.selected;

}).data('id')

};

product.priority = $('#priority').val();

product.normalPrice = $('#normal-price').val();

product.promotionPrice = $('#promotion-price').val();

product.point = $('#point').val();

product.productDesc = $('#product-desc').val();

//获取缩略图文件流

var thumbnail = $('#small-img')[0].files[0];

var formData = new FormData();

formData.append('thumbnail',thumbnail);

formData.append('productStr',JSON.stringify(product));

// 遍历商品详情图控件,获取里面的文件流

$('.detail-img').map(function(index,item){

// 判断该控件是否已选择了文件

if($('.detail-img')[index].files.length > 0){

formData.append('productImg'+index,

$('.detail-img')[index].files[0]);

}

});

var verifyCodeActual = $('#j_captcha').val();

if(!verifyCodeActual){

$.toast('请输入验证码');

return;

}

formData.append('verifyCodeActual',verifyCodeActual);

$.ajax({

url : (isEdit ? editProductUrl : addProductUrl),

type : 'POST',

data : formData,

contentType : false,

processData : false,

cache : false,

    success : function(data){

    if(data.success){

    $.toast("提交成功!");

    }else{

    $.toast("提交失败!"+data.errMsg);

    }

    $('#captcha_img').click();

    }

});

});

})


上传文件后,我在后台打断点直接报错跳过都不行!!! 

提问者 慕盖茨8087740 2019-06-16 17:58:13
芝芝兰兰 2019-06-16 17:37:46

同学你好。

1、Eclipse中设置超时时间,可以先点击红色方格停一下Tomcat服务器。http://img1.sycdn.imooc.com//climg/5d060c470001a42c01750073.jpg

双击Tomcat服务器,然后在弹出的窗口中,展开Timeouts,将其修改后。使用Ctrl+S保存一下,然后再重启。

http://img1.sycdn.imooc.com//climg/5d060b9e0001d5bf11740523.jpg

2、同学这里是不是拼写错了呢?如果同学的标签没有修改,应该是productImg

http://img1.sycdn.imooc.com//climg/5d060d9c00015ab006890216.jpg

祝学习愉快~

  • 提问者 慕盖茨8087740 #1
    虽然写错了,到我后台get也是f,其他改了,但是还是提交后还是不弹成功否
    2019-06-16 17:45:53
  • 提问者 慕盖茨8087740 #2
    有毒啊,item和index倒过来就填加不了
    2019-06-16 17:48:23
  • 芝芝兰兰 回复 提问者 慕盖茨8087740 #3
    进行下缓存清理,然后在$toast的行号前添加一下断点。看它会不会停住。如果断点生效,可以看一下data的值
    2019-06-16 17:49:16
提问者 慕盖茨8087740 2019-06-16 17:31:55

有毒 刚刚添加两个图片也报错

六月 16, 2019 5:30:25 下午 org.apache.catalina.core.StandardWrapperValve invoke

严重: Servlet.service() for servlet [spring-dispatcher] in context with path [/o2o] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. java.io.EOFException: Unexpected EOF read on the socket] with root cause

java.io.EOFException: Unexpected EOF read on the socket

at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:734)

at org.apache.coyote.http11.Http11InputBuffer.access$300(Http11InputBuffer.java:40)

at org.apache.coyote.http11.Http11InputBuffer$SocketInputBuffer.doRead(Http11InputBuffer.java:1084)

at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:140)

at org.apache.coyote.http11.Http11InputBuffer.doRead(Http11InputBuffer.java:263)

at org.apache.coyote.Request.doRead(Request.java:581)

at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:344)

at org.apache.catalina.connector.InputBuffer.checkByteBufferEof(InputBuffer.java:663)

at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:370)

at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:183)

at java.io.FilterInputStream.read(Unknown Source)

at org.apache.commons.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:134)

at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:999)

at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:903)

at java.io.InputStream.read(Unknown Source)

at org.apache.commons.fileupload.util.Streams.copy(Streams.java:100)

at org.apache.commons.fileupload.util.Streams.copy(Streams.java:70)

at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:347)

at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115)

at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:158)

at org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142)

at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1100)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:932)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)

at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Source)


提问者 慕盖茨8087740 2019-06-16 17:27:32

http://img1.sycdn.imooc.com//climg/5d060b630001cc4b06960499.jpghttp://img1.sycdn.imooc.com//climg/5d060b660001cc4b06960499.jpg控制打印什么都没。着这个 真无语

提问者 慕盖茨8087740 2019-06-16 17:24:47

@RequestMapping(value="/addproduct" ,method=RequestMethod.POST)

@ResponseBody

public Map<String,Object> addProduct(HttpServletRequest request){

Map<String,Object> modelMap = new HashMap<String,Object>();

//验证码校正

if(!CodeUtil.checkVerifyCode(request)) {

modelMap.put("success", false);

modelMap.put("errMsg", "请输入验证码");

}

//1.获取前台传来的普通参数

String productStr = HttpServletRequestUtil.getString(request, "productStr");

ObjectMapper mapper = new ObjectMapper();

Product product = null;

try {

product = mapper.readValue(productStr, Product.class);

}catch(Exception e) {

modelMap.put("success", false);

modelMap.put("errMsg", e.getMessage());

return modelMap;

}

//2.判断有没有文件流没有就返回错

List<ImageHolder> productImageList = new ArrayList<ImageHolder>();

ImageHolder thumbnail = null;

CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(

request.getSession().getServletContext());

//若请求中存在文件流,则取出相关的文件

try {

if (commonsMultipartResolver.isMultipart(request)) {

//获取缩略图

thumbnail = addImageHolder(thumbnail,productImageList,request);

} else {

modelMap.put("success", false);

modelMap.put("errMsg", "上传图片不能为空");

return modelMap;

} catch (Exception e) {

modelMap.put("success", false);

modelMap.put("errMsg", e.toString());

return modelMap;

}

//3.添加处理商品信息

if(product != null && thumbnail != null && productImageList.size()>0) {

try {

Shop currentShop = (Shop) request.getSession().getAttribute("currentShop");

product.setShop(currentShop);

ProductExecution pe = productService.addProduct(product, thumbnail, productImageList);

if (pe.getState() == ProductStateEnum.SUCCESS.getState()) {

modelMap.put("success", true);

} else {

modelMap.put("success", false);

modelMap.put("errMsg", pe.getStateInfo());

return modelMap;

} catch (ProductOperationException e) {

modelMap.put("success", false);

modelMap.put("errMsg",e.toString());

    return modelMap;

}

}else {

modelMap.put("success", false);

modelMap.put("errMsg","请输入商品信息");

return modelMap;

}

}

private ImageHolder addImageHolder(ImageHolder thumbnail, List<ImageHolder> productImageList,

HttpServletRequest request) throws IOException {

MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;

CommonsMultipartFile thumbnailFile = (CommonsMultipartFile) multipartHttpServletRequest

.getFile("thumbnail");

//构建缩略图文件流和名字的对象

thumbnail = new ImageHolder(thumbnailFile.getOriginalFilename(),

thumbnailFile.getInputStream());

//获取详情图

for (int i = 0; i < IMAGMAXCOUNT; i++) {

CommonsMultipartFile productFile = (CommonsMultipartFile) multipartHttpServletRequest

.getFile("froductImg" + i);

if (productFile != null) {

ImageHolder productImg = new ImageHolder(productFile.getOriginalFilename(),

productFile.getInputStream());

//添加详情图进List

productImageList.add(productImg);

} else {

//若取出的第i个详情图片文件流为空,则终止循环

break;

}

}


return thumbnail;

}



我一步一步调试,确定返回true了 但是就没进 没有任何提示http://img1.sycdn.imooc.com//climg/5d060aca0001af6a10680259.jpg

  • 有关这个问题,可能和缓存有关系,同学添加@ResponseBody后有无重启Tomcat?如果还是不行,清除Eclipse编译缓存在Eclipse头部菜单栏中的 Project -> Clean... 清除服务器缓存在Servers窗口,选择自己的Tomcat服务器右键 Clean... 祝学习愉快~
    2019-06-16 17:41:38
提问者 慕盖茨8087740 2019-06-16 17:13:46

java.io.EOFException: Unexpected EOF read on the socket

at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:734)

at org.apache.coyote.http11.Http11InputBuffer.access$300(Http11InputBuffer.java:40)

at org.apache.coyote.http11.Http11InputBuffer$SocketInputBuffer.doRead(Http11InputBuffer.java:1084)

at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:140)

at org.apache.coyote.http11.Http11InputBuffer.doRead(Http11InputBuffer.java:263)

at org.apache.coyote.Request.doRead(Request.java:581)

at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:344)

at org.apache.catalina.connector.InputBuffer.checkByteBufferEof(InputBuffer.java:663)

at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:370)

at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:183)

at java.io.FilterInputStream.read(Unknown Source)

at org.apache.commons.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:134)

at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:999)

at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:903)

at java.io.InputStream.read(Unknown Source)

at org.apache.commons.fileupload.util.Streams.copy(Streams.java:100)

at org.apache.commons.fileupload.util.Streams.copy(Streams.java:70)

at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:347)

at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115)

at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:158)

at org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142)

at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1100)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:932)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)

at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Source)



报错了 插入一个详情图片就报这个错 插2个没事

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师