## 后台实现代码 我们查看后台`FileController` 这里对文件上传的接口进行了统一的管理: ```java @RestController @RequestMapping("/admin/file") public class FileController { @Autowired private AttachFileService attachFileService; @PostMapping("/upload/element") public ResponseEntity uploadElementFile(@RequestParam("file") MultipartFile file) throws IOException{ if(file.isEmpty()){ return ResponseEntity.noContent().build(); } String fileName = attachFileService.uploadFile(file.getBytes(),file.getOriginalFilename()); return ResponseEntity.ok(fileName); } } ``` 同时我们查看`attachFileService` 的实现类,可以知道该文件上传是根据配置,上传到不同地方的 ```java @Service public class AttachFileServiceImpl extends ServiceImpl implements AttachFileService { private void upload(byte[] bytes, String filePath) throws IOException { // 如果开启了七牛云就上传到七牛云 Qiniu qiniu = shopConfig.getQiniu(); if (qiniu.getIsOpen()) { String upToken = auth(qiniu).uploadToken(qiniu.getBucket(),filePath); uploadManager(qiniu).put(bytes, filePath, upToken); return; } // 如果开启了阿里云就上传到阿里云 AliOss aliOss = shopConfig.getAliOss(); if (aliOss.getIsOpen()) { OSS ossClient = new OSSClientBuilder().build(aliOss.getEndpoint(), aliOss.getAccessKeyId(), aliOss.getAccessKeySecret()); try { InputStream input = new ByteArrayInputStream(bytes); ossClient.putObject(new PutObjectRequest(aliOss.getBucketName(), filePath, input)); } catch (Exception e) { e.printStackTrace(); System.err.println(e.getMessage()); } finally { ossClient.shutdown(); } return; } } } ``` ## 配置 当然,上面只是实现的代码而已,所以配置在哪配置呢? 答:需要配置挺多地方的 1. key 和 secret的配置 ![](../img/文件上传配置.png) 2.url的配置 2.1 修改文件资源服务器域名 ![](../img/文件上传url配置.png) 2.2 修改后台vue项目,修改图片域名,也就是管理系统(`mall4vs-bbc`、`mall4vp-bbc`) 开发环境: `static/config/index.js ` 生产环境: `static/config/index-prod.js` 如图: ```javascript window.SITE_CONFIG['resourcesUrl'] = 'http://img-test.mall4j.com/' ``` ![](../img/后台vue资源文件url.png) 2.3 修改uniapp图片域名(`mall4uni-bbc`) utils/config.js ![](../img/uniapp资源文件url.png) 2.4 用户pc端,无需修改 ## nginx配置 文件上传因为要经过服务器,而nginx的有限制文件上传大小的配置,这时需要配置nginx文件上传大小 ```config client_max_body_size 20m; ``` ![](../img/nginx文件上传配置.png) ## spring boot使用tomcat容器的时候要注意 spring boot 使用的web容器为tomcat的时候,每次上传会上传到一个临时的文件夹中,而linux系统会在30天后删除该文件夹,导致文件上传异常。此时需要在配置文件配置临时上传的文件夹 我们在`application.yml`指定了这个文件夹为linux系统的默认临时文件夹,解决了这个问题。 ```yaml server: tomcat: basedir: /temp ```