leyou_05_ファイルのアップロード

1.ファイルをアップロードする新しいマイクロLY-アップロードサービスを構築

2.インポートファイルが依存量にアップロード

< 依存性> 
        < 依存性> 
            < のgroupId > org.springframework.cloud </ のgroupId > 
            < たartifactId >ばねクラウドスタータのNetflix、ユーレカクライアント</ たartifactId > 
        </ 依存> 
        < 依存性> 
            < のgroupId > org.springframework。ブート</ groupIdを> 
            < たartifactId >春・ブート・スターター・ウェブ</ たartifactId > 
        </ 依存関係>
        <依存関係> 
            < groupIdを> org.springframework.boot </ groupIdを> 
            < たartifactId >春・ブート・スターターテスト</ たartifactId > 
        </ 依存関係> 
    // LY-共通包含了自定义异常处理
< 依存> < groupIdを>コム.leyou.common </ groupIdを> < たartifactId > LY-共通</ たartifactId > < バージョン> 1.0-SNAPSHOT </ バージョン> </依存関係> </ 依存関係>

 

 3.書き込みapplication.yaml設定ファイル

サーバー:
  ポート:8082 
春:
  アプリケーション:
    名前:アップロード-サービス
  サーブレット:
    マルチパート:
      MAX-ファイルサイズ:5メガバイト#ファイルアップロードサイズの制限
    アップロードファイルサイズ制限要求あたり10メガバイト番号:MAX-リクエスト-sieze  #ユーレカ ユーレカ: クライアント: -サービス-URL: defaultzone:http://127.0.0.1:10086/eureka インスタンス: インターバルザ・リース・リニューアル・イン・秒:5秒毎に5位ハートビートを送信 リース満了期間-IN-秒:10#伝達の有効期限が切れる10秒 好む-IPアドレスを:trueに IPアドレス:127.0.0.1

 

 

4.スタータ

@SpringBootApplication
@EnableDiscoveryClient
public class LyUploadApplication {
    public static void main(String[] args) {
        SpringApplication.run(LyUploadApplication.class);
    }
}

 

 

5.接受参数name="file"

当文件上传成功时返回一个文件路径   ResponseEntity.status(HttpStatus.OK).body(url);

@RestController
@RequestMapping("upload")
public class UploadController {

    @Autowired
    private UploadService uploadService;
    @PostMapping("image") //当文件上传的时候 SpringMvc会自动把上传的文件封装到MultipartFile中去
    public ResponseEntity<String> uploadImg(@RequestParam("file") MultipartFile file) {

        String url=uploadService.uuploadImg(file);
     //
return ResponseEntity.status(HttpStatus.OK).body(url); } }

 

当文件上传的时候 SpringMvc会自动把上传的文件封装到MultipartFile中去。使用MultipartFile来接受文件
@RequestParam("file") MultipartFile file

6.文件上传

@Service
@Slf4j
public class UploadService {

    private static  final List<String> ALLOW_TYPES= Arrays.asList("image/jpeg","image/png");
    public String uploadImg(MultipartFile file) {
        try {

            //检验文件的类型 防止恶意文件
            String contentType = file.getContentType();
            if (!ALLOW_TYPES.contains(contentType)){
                throw  new LyException(ExceptionEnum.INVALID_FILE_TYPE);
            };
            //校验文件的内容
            BufferedImage image = ImageIO.read(file.getInputStream());
            if (image==null){
                throw  new LyException(ExceptionEnum.INVALID_FILE_TYPE);
            }
            //保存文件到本地
            File local = new File("F:\\javaee\\IdeaResource\\uploadImg\\",file.getOriginalFilename());
            file.transferTo(local);
            //返回文件地址
            return "http://image.leyou.com/"+file.getOriginalFilename();
        } catch (IOException e) {
            log.error("上传失败",e);
            throw  new LyException(ExceptionEnum.UPLOAD_FILE_ERROR);
        }
    }
}

 

 

代码详解:1.防止恶意文件对文件进行简单的校验

       保证文件后缀名是我们规定的:

      private static  final List<String> ALLOW_TYPES= Arrays.asList("image/jpeg","image/png");
  
    Arrays.asList可以报我们 直接把参数转化成数组元素

         保证文件内容是图片:如果检验到图片则image为空

 

       //校验文件的内容
            BufferedImage image = ImageIO.read(file.getInputStream());
            if (image==null){
                throw  new LyException(ExceptionEnum.INVALID_FILE_TYPE);
            }

 

 

 

      2.上传图片

        使用transferTo(dest)方法将上传文件写到服务器上指定的文件。

       //保存文件到本地
            File local = new File("F:\\javaee\\IdeaResource\\uploadImg\\",file.getOriginalFilename());
            file.transferTo(local);
            //返回文件地址
            return "http://image.leyou.com/"+file.getOriginalFilename();

 

7测试    

返回地址上传成功

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/asndxj/p/11574531.html