Java 发送邮件附件,将文件改为字节流的形式,DataSource。

116 阅读1分钟

//旧的写法 DataSource source = new FileDataSource(file); DataHandler dataHandler=new DataHandler(source);

//改造后 InputStreamDataSource source = new InputStreamDataSource("文件字节流",“文件名称”); DataHandler dataHandler=new DataHandler(source);

InputStreamDataSource类

public class InputStreamDataSource implements DataSource {
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    private final String name;
    public InputStreamDataSource(InputStream inputStream, String name) {
        this.name = name;
        try {
            int nRead;
            byte[] data = new byte[16384];
            while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
                buffer.write(data, 0, nRead);
            }
            buffer.flush();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Override
    public String getContentType() {
        return new MimetypesFileTypeMap().getContentType(name);
    }
    @Override
    public InputStream getInputStream() throws IOException {
        return new ByteArrayInputStream(buffer.toByteArray());
    }
    @Override
    public String getName() {
        return name;
    }
    @Override
    public OutputStream getOutputStream() throws IOException {
        throw new IOException("Read-only data");
    }
}