上传图片为什么报错呢?

上传图片为什么报错呢?

https://img1.sycdn.imooc.com//climg/648040c10983c97328801624.jpg

package com.imooc.mall.controller;

import com.imooc.mall.common.ApiRestResponse;
import com.imooc.mall.common.Constant;
import com.imooc.mall.exception.ImoocMallException;
import com.imooc.mall.exception.ImoocMallExceptionEnum;
import com.imooc.mall.model.request.AddProductReq;
import com.imooc.mall.service.ProductService;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.UUID;

@RestController
public class ProductAdminController {
    @Resource
    private ProductService productService;
    @PostMapping("/admin/product/add")
    public ApiRestResponse addProduct(@RequestBody @Valid AddProductReq req){
        productService.add(req);
        return ApiRestResponse.success();
    }

    @PostMapping("/admin/upload/file")
    public ApiRestResponse uploadFile(MultipartFile file){
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        UUID uuid = UUID.randomUUID();
        File fileDirectory = new File(Constant.FILE_UPLOAD_DIR);
        File destFile = new File(Constant.FILE_UPLOAD_DIR + uuid.toString() + suffix);
        if (!fileDirectory.exists()){
            if(!fileDirectory.mkdir()){
                throw new ImoocMallException(ImoocMallExceptionEnum.MKDIR_FAILED);
            }
        }
        try {
            file.transferTo(destFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            return ApiRestResponse.success(getHost(new URI(request.getRequestURI()+""))+uuid.toString()+suffix);
        } catch (URISyntaxException e) {
            return ApiRestResponse.error(ImoocMallExceptionEnum.UPLOAD_FAILED);
        }
    }
    public URI getHost(URI uri){
        URI effectiveURI;
        try {
            effectiveURI = new URI(uri.getScheme(),uri.getUserInfo(),uri.getHost(),uri.getPort()
                    ,null,null,null);
        } catch (URISyntaxException e) {
            effectiveURI = null;
        }
        return effectiveURI;
    }
}


package com.imooc.mall.common;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class Constant {
    public static final String SALT = "asdasd[][]8235@#$%$^&%";
    public static final String IMOOC_MALL_USER = "imooc_mall_user";

    public static  String FILE_UPLOAD_DIR;
    @Value("${file.upload.dir}")
    public static void setFileUploadDir(String fileUploadDir) {
        FILE_UPLOAD_DIR = fileUploadDir;
    }
}


file.upload.dir=/Users/wangxiaodong/Desktop/ImoocProject/mall/mall0605/images/


正在回答 回答被采纳积分+1

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

1回答
好帮手慕小蓝 2023-06-07 17:02:37

同学你好,建议同学将Constant类中setFileUploadDir方法声明中的static去掉之后再尝试一下。

祝学习愉快~

  • 提问者 王小east #1

    去掉static后可以了,但是为什么返回前端的只有文件名呢https://img1.sycdn.imooc.com//climg/64804a9e090427a720161126.jpg

    2023-06-07 17:15:17
  • 好帮手慕小蓝 回复 提问者 王小east #2

    同学你好,在同学提供的代码文件中,第58行的位置,new URI的参数中,应当是“request.getRequestURL()”而不是“request.getRequestURI()”。

    祝学习愉快~

    2023-06-07 17:43:25
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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