SpringBoot入門之上傳文件

這一篇簡單實現一個上傳文件的功能,上傳文件仍是常常用到的,好比上傳用戶頭像。其實上傳和下載的原理都同樣,都是對輸入輸出流進行操做。
1.使用java裏面的讀寫文件來實現
這裏主要使用了3個註解:@RestController,@PostMapping,@RequestParam 。
@RestController表示這個類是個控制器,能夠接收和響應網絡請求;@PostMapping配置了這個方法的訪問路徑,同時指定了請求方法爲post;@RequestParam是請求附帶的參數java

package com.spring.upload.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
* Created by zhangyi on 2017/4/10.
* 上傳文件控制器
*/
@RestController
public class UploadController {
  /**
   * 文件存儲路徑
   */
  private String path="F:\\UploadFile";

  @PostMapping("/uploadFile")
  public String  uploadFile(@RequestParam("file")MultipartFile file) throws IOException {
      String result;
      File parentFile=new File(path);
      if (!parentFile.exists()) {
          //若是文件存儲路徑,則建立
          parentFile.mkdirs();
      }
      //MultipartFile會對上傳的文件作一些封裝,因此要得到源文件名要用file.getOriginalFilename()
      File myFile=new File(parentFile,file.getOriginalFilename());
      //下面就是java的一些基本東西了,建立文件,獲取輸入輸出流,讀寫文件
      FileOutputStream out=null;
      InputStream in=null;
      try {
          myFile.createNewFile();
          out=new FileOutputStream(myFile);
          in=file.getInputStream();
          byte[] b=new byte[10*1024];
          int n;
          while ((n=in.read(b))!=-1){
              out.write(b,0,n);
              out.flush();
          }
          result="success";
      } catch (IOException e) {
          e.printStackTrace();
          result="fail";
      }finally {
          //最後關閉輸入輸出流,避免形成內存泄漏
          if (out != null) {
              out.close();
          }
          if (in != null) {
              in.close();
          }
      }
      return result;
  }
}

由於MultipartFile類的transferTo方法的封裝,因此上面那一段對輸入輸出流的操做,能夠換成下面的這段web

package com.spring.upload.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * Created by zhangyi on 2017/4/10.
 * 上傳文件控制器
 */
@RestController
public class UploadController {
    /**
     * 文件存儲路徑
     */
    private String path="F:\\UploadFile";

    @PostMapping("/uploadFile")
    public String  uploadFile(@RequestParam("file")MultipartFile file) {
        String result;
        File parentFile=new File(path);
        if (!parentFile.exists()) {
            //若是文件存儲路徑,則建立
            parentFile.mkdirs();
        }
        //MultipartFile會對上傳的文件作一些封裝,因此要得到源文件名要用file.getOriginalFilename()
        File myFile=new File(parentFile,file.getOriginalFilename());
        try {
            file.transferTo(myFile);
            result="success";
        } catch (IOException e) {
            e.printStackTrace();
            result="fail";
        }
        return result;
    }
}
相關文章
相關標籤/搜索