zoukankan      html  css  js  c++  java
  • 文件上传

    1、pom.xml追加

    commons-fileupload

    commons-io

    commons-codec

    2、dispatcherservlet-servlet.xml追加

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

    3、前端

        $('#logo').ajaxSubmit({
            type: "post",
            url: '/test',
            dataType: "json",
            success: function(resp) {
                alert(resp);
            }
        });
        <form id="logo" class="hide" method="post"
            enctype="multipart/form-data">
            <input name="file" type="file" />
            <input name="imageKind" type="hidden" value="1" />
            <button onclick="postFile()">click</button>
        </form>

    4、文件在控制器用以下形式作为参数

    @RequestParam("file") MultipartFile file

    5、工具类

    import java.io.File;
    import java.io.IOException;
    import org.apache.commons.codec.digest.DigestUtils;
    import org.springframework.web.multipart.MultipartFile;
    
    /**
     * 工具类:为MultipartFile,在转移和URI映射上,提供解决方案
     *
     * @author Deolin
     */
    public class FileUtil {
    
        private static String filename(MultipartFile file) {
            return file.getOriginalFilename();
        }
    
        private static String extension(MultipartFile file) {
            String filename = filename(file);
            return filename.substring(filename.lastIndexOf(".") + 1);
        }
    
        private static String md5(MultipartFile file) throws IOException {
            return DigestUtils.md5Hex(file.getInputStream());
        }
    
        private static String destFilename(MultipartFile file) throws IOException {
            return md5(file) + "." + extension(file);
        }
    
        /**
         * 将文件转移至[C:\upload-image],并以其MD5码作为文件名
         *
         * @param originFile 原MultipartFile对象
         * @throws IOException
         */
        public static void transferFrom(MultipartFile originFile) throws IOException {
            File destFile = new File(BasicsConstant.FILE_UPLOAD_FLODER + destFilename(originFile));
            if (!destFile.exists()) {
                originFile.transferTo(destFile);
            }
        }
    
        /**
         * 获取文件映射URI
         *
         * @param file MultipartFile对象
         * @return String URI
         * @throws IOException
         */
        public static String uri(MultipartFile file) throws IOException {
            return BasicsConstant.FILE_UPLOAD_URI + destFilename(file);
        }
    
    }

    6、如果需要将文件保存至本地,而不是webapp目录下的话,

    对于开发环境,需要在pom.xml的jetty-maven-plugin添加以下配置(示例)

    <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <configuration>
            <scanIntervalSeconds>2</scanIntervalSeconds>
            <webApp>
                <contextPath>/</contextPath>
                <defaultsDescriptor>
                    src/main/resources/jetty/webdefault.xml
                </defaultsDescriptor>
            </webApp>
            <stopKey>shutdown</stopKey>
            <stopPort>8085</stopPort>
            <contextHandlers>
                <contextHandler implementation="org.eclipse.jetty.webapp.WebAppContext">
                    <contextPath>/image</contextPath>
                    <resourceBase>C:upload-image</resourceBase>
                </contextHandler>
            </contextHandlers>
        </configuration>
    </plugin>

    对于部署环境,如tomcat,需要在%TOMCAT%confserver.xml的Host标签内添加以下标签

    <Context docBase="C:\upload-image" path="/image" reloadable="true"/>

    ※第6点出现的两个本地路径[c:upload-image],需要在第5点的工具类中出现[BasicsConstant.FILE_UPLOAD_FLODER]。

  • 相关阅读:
    iOS resign code with App Store profile and post to AppStore
    HTTPS科普扫盲帖 对称加密 非对称加密
    appid 评价
    使用Carthage安装第三方Swift库
    AngularJS:何时应该使用Directive、Controller、Service?
    xcode7 The operation couldn't be completed.
    cocoapods pod install 安装报错 is not used in any concrete target
    xcode7 NSAppTransportSecurity
    learning uboot how to set ddr parameter in qca4531 cpu
    learning uboot enable protect console
  • 原文地址:https://www.cnblogs.com/deolin/p/7391422.html
Copyright © 2011-2022 走看看