项目需求中涉及到从七牛服务器上获取文件内容,并在邮件附件中展示以及能够支持预览和下载。
七牛服务器与大多数服务器相同,相信小伙伴们通过搜索引擎,都能了解到,大部分服务器获取文件内容的代码都是根据URL,获取资源内容的。
七牛当然也不例外。
故而,如果能拿到服务器上资源的URL,代码就能相对简单。如:
fileURL就是通过各种辗转获取到服务器上的资源路径;
ByteArrayOutputStream baos = URLUtils.readBaosByUrlPath(fileURL);
MailService.MailAttachment attachment = new MailService.MailAttachment(fileName + suffix, baos);
this.sendEmail(to, subject, params, "e-comrise-postinfo", attachment);
public static class MailAttachment {
private String file_name;
private ByteArrayOutputStream byteArrayOutputStream;
public MailAttachment(String file_name, ByteArrayOutputStream byteArrayOutputStream) {
this.file_name = file_name;
this.byteArrayOutputStream = byteArrayOutputStream;
}
public String getFile_name() {
return file_name;
}
public ByteArrayResource getResource() {
return new ByteArrayResource(byteArrayOutputStream.toByteArray());
}
public void closeResource() {
try {
byteArrayOutputStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
那么,就有小伙伴好奇我这个工具类是怎么实现的了?废话不多说,直接上代码;
public static ByteArrayOutputStream readBaosByUrlPath(String urlPath) throws IOException {
if (!isLegalUrl(urlPath)) return null;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try(InputStream inputStream =new URL(urlPath).openStream()){
IOUtils.copy(inputStream, byteArrayOutputStream);
}
return byteArrayOutputStream;
}
public static Boolean isLegalUrl(String url) {
Pattern pattern = Pattern.compile("[a-zA-z]+://[^\\s]*");
// Pattern p = Pattern.compile("^(http|www|ftp|)?(://)?(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*((:\\d+)?)(/(\\w+(-\\w+)*))*(\\.?(\\w)*)(\\?)?(((\\w*%)*(\\w*\\?)*(\\w*:)*(\\w*\\+)*(\\w*\\.)*(\\w*&)*(\\w*-)*(\\w*=)*(\\w*%)*(\\w*\\?)*(\\w*:)*(\\w*\\+)*(\\w*\\.)*(\\w*&)*(\\w*-)*(\\w*=)*)*(\\w*)*)$",Pattern.CASE_INSENSITIVE );
Matcher matcher = pattern.matcher(url);
if (matcher.find()) {
return isConnection(url);
} else {
return false;
}
}
引入的各种包:
import org.apache.commons.io.IOUtils;
import java.net.URL;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
如果有小伙伴想要深度了解这部分内容的话,请留言。知无不言言无不尽。前提:力所能及之下。
最后,祝愿开发路上的小伙伴们,永不脱发!