先告诉你答案,换测试工具就好,不要走swagger测试。因为你会发现文件是损坏的,无法打开。
项目中集成Swagger,用来接口调试,确实是比较方便啊,问题就出来这,也是也应该一开始就想到,当时同时下载到本地文件夹和附件文件中,本地项目中文件是可以打开的,而附件中的文件大了一倍,走完接口,还需要在swg页面点下链接,才会以附件格式下载。
这里也附上一下下载代码demo
if (!AliOssUtil.fileExist(key1[1])) { // 文件不存在
log.info("文件不存在");
return;
}
// 使用签名URL进行临时授权
// OSSObject ossObject = ossClient.getObject(bucketName, key1[1]);
OSSObject ossObject = downLoadImage(key1[1], ossClient);
try {
response.setContentType("application/octet-stream; charset=UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes(), "ISO-8859-1"));
InputStream is = ossObject.getObjectContent();
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[1024];
int lenght = 0;
while ((lenght = is.read(buffer)) != -1) {
os.write(buffer, 0, lenght);
}
os.flush();
os.close();
is.close();
ossClient.shutdown();
这里说一下:fileName 是指你bucket下的文件全路径名(包括文件名) ,比如你文件在bucket下的 project/img,fileName就是project/img+文件名
public static OSSObject downLoadImage(String fileName, OSS ossClient) throws UnsupportedEncodingException {
// url过期时间为一小时 ms
Date expiration = new Date(new Date().getTime() + 3600 * 1000);
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, fileName, HttpMethod.GET);
request.setExpiration(expiration);// 设置过期时间。
// ResponseHeaderOverrides header = new ResponseHeaderOverrides();
// header.setContentDisposition("attachment;filename="+new String("fileName".getBytes(), "ISO-8859-1"));
// request.setResponseHeaders(header);
// 生成签名URL(HTTP GET请求)。
URL signedUrl = ossClient.generatePresignedUrl(request);
log.info("url签名{}", signedUrl);
OSSObject object = ossClient.getObject(signedUrl, new HashMap<>());
return object;
}
就这样,所以 还是要多用测试工具! 有问题欢迎留言。
Ending!!!