大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 SSM上傳文件到數(shù)據(jù)庫

SSM上傳文件到數(shù)據(jù)庫

更新時(shí)間:2022-01-14 10:07:14 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1243次

基于ssm的文件上傳到服務(wù)器,存入數(shù)據(jù)庫

1.在maven中導(dǎo)入依賴

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>${commons-fileupload.version}</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>${commons-io.version}</version>
    </dependency>

2.在spring-mvc配置文件中添加

    <!-- 定義文件解釋器 -->
    <bean name="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--設(shè)置文件大小:?jiǎn)挝蛔止?jié)-->
        <property name="maxInMemorySize" value="1024" />
        <property name="defaultEncoding" value="UTF-8" />
        <property name="maxUploadSize" value="5000000"/>
    </bean>

3.定義上傳文件工具類

package com.nz.homework.utils;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;
public class UploadUtils {
    public String upload(String path,MultipartFile multipartFile){
        //返回文件的類型,在此處中并沒有用到,只是列出getContentType是返回文件的類型
        String type = multipartFile.getContentType();
        //拿到文件的原始名稱,即例如a.jpg
        String originalFilename = multipartFile.getOriginalFilename();
        //判斷是否為空
        if (originalFilename==null){
            return null;
        }
        //因?yàn)樯蟼魑募挥幸粋€(gè)upload目錄,所有的文件都會(huì)放在這個(gè)文件下,會(huì)堆積大量的文件,所以把文件進(jìn)行分開在upload不同的目錄中,利用hash算法就行計(jì)算分配目錄。例如upload/4/5;或者upload/5/5;這種
        //拿到文件原名稱的hashcode
        int hashCode = originalFilename.hashCode();
        //拿到upload下第一個(gè)目錄的名稱upload/n
        int dir1 = hashCode & 0xf;
        //拿到upload下的n目錄下的目錄名稱upload/n/n
        int dir2 = (hashCode & 0xf0) >> 4;
        //拼接路徑,path是傳過來的文件保存路徑,即upload的真實(shí)路徑,
        String dir = path + File.separator+dir1 + File.separator + dir2;
        把路徑丟到File文件中
        File file = new File(dir);
        //如果d:\1\2這個(gè)文件夾不存在,才創(chuàng)建
        if (!file.exists()){
            file.mkdirs();
        }
        //生成新的UUID.randomUUID().toString():為了防止文件名重復(fù)
        String newFileName = UUID.randomUUID().toString().replace("-","")+"."+originalFilename.substring(originalFilename.lastIndexOf(".")+1);
        InputStream is = null;
        OutputStream os = null;
        try {
            is = multipartFile.getInputStream();
            os = new FileOutputStream(dir+File.separator+newFileName);
            //對(duì)文件進(jìn)行復(fù)制
            FileCopyUtils.copy(is,os);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (os!=null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //返回文件的路徑,以便保存到數(shù)據(jù)庫中
        return dir1+File.separator+dir2+File.separator+newFileName;
    }
}

4.在service的實(shí)現(xiàn)類中實(shí)現(xiàn)

@Service("/bookService")
public class BookServiceImpl implements BookService {
    private static final String UPLOAD_DIR= "D:\\code\\week15\\practice\\src\\main\\webapp\\upload";
    //不建議用new UploadUtils,因?yàn)橐婉詈希ㄗh把UploadUtils類的upload方法換成靜態(tài)的方法
    private UploadUtils uploadUtils = new UploadUtils();
    @Resource
    BookMapper bookMapper;
        @Override
    public int insertBook(MultipartFile multipartFile, Book book) {
        String newPath = uploadUtils.upload(UPLOAD_DIR, multipartFile);
        //設(shè)置存到數(shù)據(jù)庫的img路徑
        book.setImg(newPath);
        return bookMapper.addBook(book);
    }
}

5.controller層代碼

    @RequestMapping("/addBook")
    //Result為工具類,參考上一篇的分頁中有完整的Result代碼
    public Result addBook(MultipartFile multipartFile, Book book){
        try {
            if (multipartFile.isEmpty()){
                return Result.error();
            }
            int rows = bookService.insertBook(multipartFile,book);
            return Result.success(rows);
        } catch (Exception e) {
            log.error(e.getMessage());
        }
        return Result.error();
    }

6.entity層代碼

@Data
public class Book {
    /**
    * 圖書ID
    */
    private Integer bid;
    /**
    * 圖書名稱
    */
    private String name;
    /**
    * 作者
    */
    private String author;
    private Double price;
    private Date crtTime;
    private String Img;
}

配置tomcat虛擬路徑

1.第一步

2.第二步,點(diǎn)擊External Souce

3.第三步,選擇要上傳的位置,web下的upload,點(diǎn)擊upload,然后重啟tomcat即可

前端中的form表單結(jié)合FormData

<!DOCTYPE html>
<html lang="en" xmlns:border="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery.js"></script>
    <script>
        $(function () {
            $("#upload").click(function () {
            //$('#uploadForm')[0]為選擇器,不規(guī)定為id選擇器,前提是該選擇器能獲取file文件,然后放入到formData中
                var formData = new FormData($('#uploadForm')[0]);
                console.log(formData.get("file"))
                if (formData ==={} || formData===""){
                    alert("請(qǐng)選擇文件")
                }
                formData.append("multipartFile",formData.get("file"));
                //調(diào)用formData的append方法,將book屬性都添加進(jìn)去,img填空白即可。
                formData.append("name","龍哥傳");
                formData.append("author","龍哥");
                formData.append("price","10.33");
                formData.append("img","");
                $.ajax({
                    type: 'post',
                    url: "http://localhost:8080/practice/book/addBook",
                    data: formData,
                    cache: false,
                    processData: false,
                    contentType: false,
                    success:(function (results) {
                    if (results.data!==0 || results.status === 200){
                        alert("成功")
                    }
                    }),
                    error:(function () {
                    alert("上傳失敗");
                }),
            });
         });
     });
    </script>
</head>
<body>
<form id="uploadForm" enctype="multipart/form-data">
    文件:<input id="file" type="file" name="file"/>
</form>
<button id="upload">上傳文件</button>
</body>
</html>

 

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 色综合视频 | 日日操干| 高清一区二区亚洲欧美日韩 | 亚洲精品蜜桃久久久久久 | 青青青青手机在线视频观看国产 | 99精品视频在线观看re | 92在线视频 | 久草热久草在线视频 | 青青青免费手机版视频在线观看 | 2017天天干天天射 | 欧美中文在线 | 九九热伊人 | 国产成人精品高清在线观看99 | 久久一级 | 欧美日韩在线观看视频 | 久久国产这里只有精品 | 九九艹| 五月天在线网站 | 离线枕边人在线观看 | 国产精品99r8在线观看 | 天天插天天操天天干 | 在线免费毛片 | 亚洲欧洲一区二区三区在线观看 | 国产日韩片 | 日本在线观看不卡免费视频 | 日本亚洲精品久久 | 天天射狠狠干 | 亚洲精品色婷婷在线影院麻豆 | 国产精品成aⅴ人片在线观看 | 日韩欧美a级高清毛片 | 中文字幕日本一区波多野不卡 | 国产综合精品久久久久成人影 | 国产精品乱码一区二区三区 | a网站在线观看 | 九九精品视频在线观看九九 | 欧美性精品不卡在线观看 | 国产伦精品一区二区三区在线观看 | 国产亚洲欧美另类久久久 | 免费香蕉依人在线视频久 | www在线小视频免费 www中文字幕 | 欧美综合视频在线观看 |