Spring上传文件,图片,以及常见的问题

1. 在工程依赖库下添加文件上传jar包

  commons-fileupload-1.2.2.jar
  commons-io-2.4.jar

2.在springMVC配置文件中配置视图解析multipartResolver

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="5000000" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>

  这里有个问题需要注意一下,Bean 的id必须为multipartResolver,因为在项目初始化的时候,Spring容器会通过这个id来进行注入,下面是Spring源码:



 public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";
/** MultipartResolver used by this servlet */
    private MultipartResolver multipartResolver;
/*
   省略一大堆代码
*/
/**
     * Initialize the MultipartResolver used by this class.
     * <p>If no bean is defined with the given name in the BeanFactory for this namespace,
     * no multipart handling is provided.
     */
    private void initMultipartResolver(ApplicationContext context) {
        try {
            this.multipartResolver = context.getBean(MULTIPART_RESOLVER_BEAN_NAME, MultipartResolver.class);
            if (logger.isDebugEnabled()) {
                logger.debug("Using MultipartResolver [" + this.multipartResolver + "]");
            }
        }
        catch (NoSuchBeanDefinitionException ex) {
            // Default is no multipart resolver.
            this.multipartResolver = null;
            if (logger.isDebugEnabled()) {
                logger.debug("Unable to locate MultipartResolver with name ‘" + MULTIPART_RESOLVER_BEAN_NAME +
                        "‘: no multipart request handling provided");
            }
        }
    }

  接下来,我们测试一下如果写错之后会报什么错误

  

  上面只是DEBUG, 查看源码就会知道会DEBUG输出这一句,

  下面是具体报的错误:预期的MultipartHttpServletRequest:是否配置了MultipartResolver?

下面依次是jsp代码和后台实现上传的java代码:

  

<form id="userForm" name="userForm" method="post"
        action="${pageContext.request.contextPath }/user/useraddsave.html"
        enctype="multipart/form-data">
            <div>
                <label for="a_idPicPath">证件照:</label> <input type="file"
                    name="a_idPicPath" id="a_idPicPath" /> <font color="red"></font>
            </div>
            <div class="providerAddBtn">
                <input type="button" name="add" id="add" value="保存"> <input
                    type="button" id="back" name="back" value="返回">
            </div>
        </form>
//保存新增用户信息
    @RequestMapping(value="/useraddsave.html",method=RequestMethod.POST)
    public String addUserSave(User user,HttpServletRequest request,@RequestParam(value="a_idPicPath",required=false) MultipartFile multipartFile){

        if(!multipartFile.isEmpty()){
            String path = "/statics"+File.separator+"upload"; //文件或者图片上传到的位置
            String oldName = multipartFile.getOriginalFilename(); //上传的文件名
            String prefix = FilenameUtils.getExtension(oldName); //文件的后缀名
            int maxSize =5000000;
            if(multipartFile.getSize()<maxSize){
                if(prefix.equalsIgnoreCase("jpg")|| prefix.equalsIgnoreCase("png")){
                    String fileName = System.currentTimeMillis()+RandomUtils.nextInt(1000000)+"_Personal."+prefix; // 为避免文件名一样随机生成的文件名保存在服务器
                    File targetFile = new File(path,fileName);
                    if(!targetFile.exists()){
                        targetFile.mkdirs();
                    }
                    try {
                        multipartFile.transferTo(targetFile); //开始上传
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        request.setAttribute("uploadFileError", "上傳出現異常,上傳失敗");
                    }
                    String idPicPath= path+File.separator+fileName;
                    user.setIdPicPath(idPicPath);
                    user.setCreationDate(new Date());
                    userService.add(user);
                    return "redirect:/user/userlist.html";
                } else {
                    request.setAttribute("uploadFileError", "文件格式錯誤,上傳失敗");
                }
            } else {
                request.setAttribute("uploadFileError", "文件太大,上傳失敗");
            }
        }
        return "useradd";//新增失败返回到useradd.jsp
    }

  方法需要添加参数 @RequestParam(value="a_idPicPath",required=false) MultipartFile multipartFile

              The end......

时间: 2024-08-01 18:38:33

Spring上传文件,图片,以及常见的问题的相关文章

基于spring-boot的web应用,ckeditor上传文件图片文件

说来惭愧,这个应用调试,折腾了我一整天,google了很多帖子,才算整明白,今天在这里做个记录和分享吧,也作为自己后续的参考! 第一步,ckeditor(本博文论及的ckeditor版本4.5.6)的配置图片文件上传功能,默认这个是没有开启的,就不用多说,ckeditor官网上也说的很清楚!http://docs.ckeditor.com 下面简单的说下配置(配置文件algoConfig.js): 1 CKEDITOR.editorConfig = function( config ) { 2

一款简单实用的上传文件图片插件并且兼容移动端zyupload.js

1.下载zyupload插件包 包含的文件如下图: 2.在/images/fileType文件夹下定义上传文件的显示图标 如下图所示: 3.打开zyupload.js,修改上传后显示文件图标路径 如下图所示: 4.调用的JS代码 <link rel="stylesheet" href="~/Content/assets/css/zyupload-1.0.0.min.css"> <script type="text/javascript&q

spring 上传文件文件的一个例子,

/** * 类名称:UploadTest 类描述:创建人:zhang 创建时间:2015年3月13日 下午4:20:57 修改人:zhang * 修改时间:2015年3月13日 下午4:20:57 修改备注: * * @version * */@Controllerpublic class UploadTest { @RequestMapping(value = "upFile", method = RequestMethod.POST) public void upFile(@Req

spring上传文件并限制大小配置以及全局异常处理

<!-- 上传文件并限制大小为--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="100485760" /> </bean> <!--

通过Ajax方式上传文件(图片),使用FormData进行Ajax请求

HTML: <form id= "uploadForm"> <p >指定文件名: <input type="text" name="filename" value= ""/></p > <p >上传文件: <input type="file" name="file"/></ p> <input ty

elementUI 上传文件图片大小加了限制后 仍然上传了

https://blog.csdn.net/chanlingmai5374/article/details/80558444  看了这位老哥的说法 在看看文档 才发现自己没认真看文档 <el-upload :beforeUpload="beforeAvatarUploadPdf" </el-upload> beforeAvatarUploadPdf(file){ var testmsg=file.name.substring(file.name.lastIndexOf

spring 上传文件

1.配置文件部分 在spring的配置文件中加入下面代码 <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"/> 2.用到的jar包 commons-fileupload-1.2.1.jar commons-io-1.3.2.jar 3.代码部分--上传到本地文件夹 public class Uplo

FileUtils类上传文件图片

import java.io.File; import java.util.Scanner; import org.apache.commons.io.FileUtils; public class UploadFile { public static void main(String[] args){ Scanner sc = new Scanner(System.in); String SourceLocation = sc.nextLine(); String [] sources = S

.NET HttpPost 上传文件图片到服务器

public class ImageData { public string imageFilePath { get; set; } public string tempFilePath { get; set; } } ImageData data = new ImageData(); [HttpPost] public ImageData UploadFile() { HttpContext context = HttpContext.Current; if (context.Request.