SpringBoot進行文件上傳(一)

掃盲

首先,必須明確幾個問題:

  • 如果是ajax進行表單提交或者數(shù)據(jù)請求,就不要考慮文件上傳的問題了答朋。ajax做的是數(shù)據(jù)提交,壓根就不能進行文件的輸出棠笑。
  • 文件上傳梦碗,必須注意一下請求類型,需要是文件請求并且必須是POST形式蓖救。參照:
<form id="baseForm"  action="/admin/saveOrUpdatePageInfo" class="form-horizontal" role="form"
                      enctype="multipart/form-data" method="post">

注意:兩個屬性enctype和method洪规,其中method記得一定指定一下post。

實現(xiàn)過程

后臺業(yè)務實現(xiàn)

@RequestMapping("saveOrUpdatePageInfo")
    public String saveOrUpdatePageInfo(ModelMap model,@RequestParam("file") MultipartFile file, PageInfo pageInfo,HttpServletRequest request){
        //首先進行文件上傳
        String contentType = file.getContentType();
        String fileName = file.getOriginalFilename();
        /*System.out.println("fileName-->" + fileName);
        System.out.println("getContentType-->" + contentType);*/
//        String filePath = request.getSession().getServletContext().getRealPath("imgupload/");
//        String filePath = location+"/"+fileName;
        try {
            FileUtil.uploadFile(file.getBytes(), location, fileName);
        } catch (Exception e) {
            // TODO: handle exception
            return "1";
        }
        pageInfo.setUrl(fileName);
        //查詢業(yè)務編號是否存在
        PageInfo samePageInfo = pageInfoService.selectByName(pageInfo.getName());
        if(samePageInfo!=null){
            return "1";
        }else{
            pageInfoService.saveOrUpdate(pageInfo);

        }

        return toPageSetting(model,request);
    }

以上需要注意文件元素的傳入:使用RequestParam注解進行該元素的傳入操作@RequestParam("file") MultipartFile file循捺,其中file表示html頁面中文件對應的name標簽值斩例。

文件上傳

/**
     * 上傳文件
     * @param file  文件對應的byte數(shù)組流   使用file.getBytes()方法可以獲取
     * @param filePath  上傳文件路徑,不包含文件名
     * @param fileName 上傳文件名
     * @throws Exception
     */
    public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception {
        File targetFile = new File(filePath);
        if(!targetFile.exists()){
            targetFile.mkdirs();
        }
        FileOutputStream out = new FileOutputStream(filePath+"/"+fileName);
        out.write(file);
        out.flush();
        out.close();
    }

頁面設計

<form id="baseForm"  action="/admin/saveOrUpdatePageInfo" class="form-horizontal" role="form"
                      enctype="multipart/form-data" method="post">
                    <div class="form-group">
                        <label class="col-md-2 control-label">資源名稱</label>
                        <div class="col-md-10">
                            <input type="text" class="form-control" name="name">
                        </div>
                    </div>
</form>

上傳文件路徑

以上實現(xiàn)了文件的上傳過程从橘,但是我們使用springboot進行開發(fā)過程中念赶,最終打包生成的是一個jar包。那么問題來了恰力,文件上傳到了什么地方呢叉谜?大家知道,jar包啟動的時候踩萎,會默認生成一個tomcat運行文件夾正罢。上傳到該文件夾下面明顯是不合適的,因為每次運行jar包都會新生成一遍。那么翻具,之前上傳的文件都不存在了履怯,明顯不是我們期望的結果。
如何去指定一個文件夾作為默認的文件上傳路徑呢裆泳?
配置文件配置如下:

img.location = d:/mypicture
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=file:${img.location}

我們使用@Value標簽獲取到文件上傳路徑叹洲。之后將路徑傳入到上傳文件的方法里面。

 @Value("${img.location}")
  private String location;

FileUtil.uploadFile(file.getBytes(), location, fileName);

以上工禾,完成了一個指定文件路徑上傳的功能运提。

靜態(tài)資源訪問

上傳文件完成之后,就可以進行圖片的訪問了闻葵。但是民泵,對于springboot而言,已經(jīng)對請求進行了攔截槽畔。并且栈妆,假如是絕對路徑的話,該圖片是存在于服務端的厢钧,服務端下的某個絕對地址鳞尔,如何從客戶端進行訪問?
配置文件配置如下:

img.location = d:/mypicture
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=file:${img.location}

什么意思呢早直?我們指定了一個靜態(tài)資源寥假,并且指定所有的請求都會經(jīng)過該靜態(tài)資源的過濾。假如此時我請求一個資源霞扬,比如localhost:8080/test.jpg糕韧。我們就會對該路徑進行攔截,攔截之后做什么呢喻圃?會去spring.resources.static-locations對應的路徑下面查找該資源萤彩。當然,如果配置多個的話级及,會進行路徑的逐個查詢乒疏。此時,會從d:/mypicture下滿查找test.jpg饮焦。找到之后怕吴,就進行了資源的顯示。

以上县踢,即為簡單的基于springboot的文件上傳說明转绷。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市硼啤,隨后出現(xiàn)的幾起案子议经,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煞肾,死亡現(xiàn)場離奇詭異咧织,居然都是意外死亡,警方通過查閱死者的電腦和手機籍救,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門习绢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蝙昙,你說我怎么就攤上這事闪萄。” “怎么了奇颠?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵败去,是天一觀的道長。 經(jīng)常有香客問我烈拒,道長圆裕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任缺菌,我火速辦了婚禮葫辐,結果婚禮上搜锰,老公的妹妹穿的比我還像新娘伴郁。我一直安慰自己,他們只是感情好蛋叼,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布焊傅。 她就那樣靜靜地躺著,像睡著了一般狈涮。 火紅的嫁衣襯著肌膚如雪狐胎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天歌馍,我揣著相機與錄音握巢,去河邊找鬼。 笑死松却,一個胖子當著我的面吹牛暴浦,可吹牛的內容都是我干的。 我是一名探鬼主播晓锻,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼歌焦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了砚哆?” 一聲冷哼從身側響起独撇,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纷铣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卵史,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年搜立,在試婚紗的時候發(fā)現(xiàn)自己被綠了程腹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡儒拂,死狀恐怖寸潦,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情社痛,我是刑警寧澤见转,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站蒜哀,受9級特大地震影響斩箫,放射性物質發(fā)生泄漏。R本人自食惡果不足惜撵儿,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一乘客、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淀歇,春花似錦易核、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纳决,卻和暖如春碰逸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阔加。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工饵史, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胜榔。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓胳喷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苗分。 傳聞我的和親對象是個殘疾皇子厌蔽,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)摔癣,斷路器奴饮,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評論 25 707
  • 前言:學習SpringBoot不應該直接就是開始使用SpringBoot,如果直接拿來用肯定會有很多人不是很明白特...
    CoderZS閱讀 74,765評論 10 217
  • 南國的蒼穹深胳,幾乎從未有過圣潔的白色晶體飄然落下侵浸,枯索的嚴冬悶壞了躁動不安的心靈范咨,毅然決然提起寒微的行囊啼染,揮手作別游...
    易郁生閱讀 707評論 0 6