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测试
返回地址上传成功