0

私はjavamailapiを使用して、javaアプリケーションからの添付ファイル付きの電子メールを送信しました。これは単純です。

File f= new File(file);
MimeBodyPart mbp2 = new MimeBodyPart();

try {
    mbp2.attachFile(f);
} catch (IOException e) {
    e.printStackTrace();
}



Multipart mp= new MimeMultipart();
mp.addBodyPart(mbp2);

message.setContent(mp);

しかし、私が知りたいのは、添付ファイルのアップロードの進行状況を知る方法です。httpclientとは異なり、書き込み先の出力ストリームが見つかりません。ありがとう!

4

2 に答える 2

1

メソッドの実装を参照してください。

public void attachFile(File file) throws IOException, MessagingException {
    FileDataSource fds = new FileDataSource(file);      
    this.setDataHandler(new DataHandler(fds));
    this.setFileName(fds.getName());
}

ファイルのアップロードを追跡するカスタム実装で FileDataSource をオーバーライドする必要があります。

getInputStream() メソッドをオーバーライドして、読み取りバイト数をカウントする FilterOutputStream を返す必要があります。Apache commons-io には、ジョブを実行できるCountingInputStreamクラスがあります。

次に、読み取りバイト数とファイル長を比較して進行を確認するだけです。

于 2012-08-22T13:51:49.040 に答える
0

わかりました、私はDataHandler()をオーバーライドしてそれを行いました、そしてそれは本当にうまくいきます!

class progress extends DataHandler{
long len;
public idky(FileDataSource ds) {
    super(ds);
    len= ds.getFile().length();
    // TODO Auto-generated constructor stub
}



long transferredBytes=0;
public void writeTo(OutputStream os) throws IOException{

        InputStream instream = this.getInputStream();
        DecimalFormat dFormat = new DecimalFormat("0.00");

      byte[] tmp = new byte[4096];
      int l;
      while ((l = instream.read(tmp)) != -1)
      {
        os.write(tmp, 0, l);
        this.transferredBytes += l;
        System.out.println(dFormat.format(((double)transferredBytes/(double)this.len)*100)+"%");

      }
      os.flush();


}
}

そしてそれをMimeBodyPartに追加しました。

于 2012-08-22T17:25:42.743 に答える