Upload de arquivo (usando o armazenamento de objetos em nuvem Qiniu)

Upload de arquivos usando o armazenamento de objetos em nuvem Qiniu

1. Por que não salvar o arquivo no servidor de aplicativos?

Como o arquivo está armazenado no servidor de aplicativos, o arquivo será maior que os dados JSON comuns. Cada vez que o arquivo é lido, o arquivo deve ser lido do servidor de aplicativos, o que consumirá mais tempo e largura de banda, e o tempo de resposta de o servidor de aplicativos aumentará. No processo de desenvolvimento real, implantaremos os arquivos separadamente.

2. Uso básico do Qiniu Cloud

Endereço: https://www.qiniu.com/
requer autenticação.
Após a autenticação, entre no console -> Object Storage -> Space Management
para criar um novo espaço
insira a descrição da imagem aqui

lembre-se do nome do seu espaço

Vá para gerenciamento de chaves e copie seu AK e SK
insira a descrição da imagem aqui
insira a descrição da imagem aqui

3. Arquivo de configuração

dependências do maven

 <dependency>
        <groupId>com.qiniu</groupId>
        <artifactId>qiniu-java-sdk</artifactId>
        <version>[7.7.0, 7.7.99]</version>
    </dependency>

yml
preencha o que você acabou de copiar aqui
insira a descrição da imagem aqui

Em quarto lugar, o servidor

Nota: os arquivos não podem ser serializados, portanto, a impressão de log não pode ser feita! ! ! (O blogueiro anotou a impressão do log)

@PostMapping("/applyRoleFile")
@PreAuthorize("hasAuthority('normal')")
//@SystemLog(businessName = "申请角色")
public ResponseResult applyRoleFile(@RequestBody MultipartFile file) {
    
    
    return userService.applyRoleFile(file);
}
@Data
@Service
@ConfigurationProperties(prefix = "oss")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
    
    
    //上传凭证
    private String accessKey;
    private String secretKey;
    private String bucket;

  @Override
    public ResponseResult applyRoleFile(MultipartFile file) {
    
    
        //判断文件类型
        //获取原始文件名
        String originalFilename = file.getOriginalFilename();
        //对原始文件名进行判断.
        // 只要pdf文件
        if (!originalFilename.endsWith(".pdf")) {
    
    
            throw new SystemException(AppHttpCodeEnum.FILE_TYPE_ERROR);
        }
        //生成默认文件名
        String filePath = PathUtils.generateFilePath(originalFilename);
        //判断通过上传文件到OSS
        String url = uploadOSS(file, filePath);



     /**
	这里是将地址url更新到数据库 这里就不展示了 主要是前面的那一块
	*/
        return ResponseResult.okResult();
    }

	private String uploadOSS(MultipartFile file, String filePath) {
    
    
	    //构造一个带指定 Region 对象的配置类
	    // 即你的空间是哪个地区,这里使用自动帮你填写
	    Configuration cfg = new Configuration(Region.autoRegion());
	
	    UploadManager uploadManager = new UploadManager(cfg);
	
	    //默认不指定key的情况下,以文件内容的hash值作为文件名
	    String key = filePath;
	
	    try {
    
    
	        InputStream inputStream = file.getInputStream();
	        Auth auth = Auth.create(accessKey, secretKey);
	        String upToken = auth.uploadToken(bucket);
	
	        try {
    
    
	            Response response = uploadManager.put(inputStream, key, upToken, null, null);
	            //解析上传成功的结果
	            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
	            //这个是上传到七牛云服务器的路径定义
	            return "http://r9yeel75m.hn-bkt.clouddn.com/" + key;
	        } catch (QiniuException ex) {
    
    
	            Response r = ex.response;
	            System.err.println(r.toString());
	            try {
    
    
	                System.err.println(r.bodyString());
	            } catch (QiniuException ex2) {
    
    
	                //ignore
	            }
	        }
	    } catch (FileNotFoundException e) {
    
    
	        e.printStackTrace();
	    } catch (IOException e) {
    
    
	        e.printStackTrace();
	    }
	    return "error";
	}

5. Teste

Teste com carteiro
insira a descrição da imagem aqui
insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/weixin_51799151/article/details/124018360
Recomendado
Clasificación