文件上传下载.md 3.2 KB

后台实现代码

我们查看后台FileController 这里对文件上传的接口进行了统一的管理:

@RestController
@RequestMapping("/admin/file")
public class FileController {
   
   @Autowired
   private AttachFileService attachFileService;
   
   @PostMapping("/upload/element")
   public ResponseEntity<String> 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 的实现类,可以知道该文件上传是根据配置,上传到不同地方的

@Service
public class AttachFileServiceImpl extends ServiceImpl<AttachFileMapper, AttachFile> 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的配置

2.url的配置

2.1 修改文件资源服务器域名

2.2 修改后台vue项目,修改图片域名,也就是管理系统(mall4vs-bbcmall4vp-bbc

开发环境: static/config/index.js

生产环境: static/config/index-prod.js

如图:

window.SITE_CONFIG['resourcesUrl'] = 'http://img-test.mall4j.com/'

2.3 修改uniapp图片域名(mall4uni-bbc

utils/config.js

2.4 用户pc端,无需修改

nginx配置

文件上传因为要经过服务器,而nginx的有限制文件上传大小的配置,这时需要配置nginx文件上传大小

client_max_body_size 20m;

spring boot使用tomcat容器的时候要注意

spring boot 使用的web容器为tomcat的时候,每次上传会上传到一个临时的文件夹中,而linux系统会在30天后删除该文件夹,导致文件上传异常。此时需要在配置文件配置临时上传的文件夹

我们在application.yml指定了这个文件夹为linux系统的默认临时文件夹,解决了这个问题。

server:
  tomcat:
    basedir: /temp