1

AWSでファイルアップロード機能を開発しようとしています。

ポスト リクエストを処理するサーブレットを作成しました。フレームワークを以下に示します。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    boolean isMulti = ServletFileUpload.isMultipartContent(request);
    if (isMulti) {
        ServletFileUpload upload = new ServletFileUpload();

        try {
            FileItemIterator iter = upload.getItemIterator(request);
            while (iter.hasNext()) {
                FileItemStream item = iter.next();
                InputStream inputStream = item.openStream();
                if (item.isFormField()) {

                } else {
                    String fileName = item.getName();
                    if (fileName != null && fileName.length() > 0) {

                        //read stream of file uploaded

                        //store as a temporary file

                        //upload the file to s3
                    }
                }
            }
        } catch (Exception e) {
        }
    }

    response.sendRedirect("location of the result page");
}

ファイルをアップロードするには、これらのクラスを使用する必要があると思います。試してみましたが、S3 では、ファイルのサイズは常に 0 バイトです。複数のパーツを含むファイルをアップロードする他の方法はありますか?

  1. InitiateMultipartUploadRequest
  2. InitiateMultipartUploadResult
  3. UploadPartRequest
  4. CompleteMultipartUploadRequest

コードhttp://docs.aws.amazon.com/AmazonS3/latest/dev/llJavaUploadFile.htmlを参照します

4

1 に答える 1

3

1 つはファイル全体をアプリ コンテナ (サーブレットが実行されている tomcat 上) に取得することで、もう 1 つはファイルを S3 にアップロードすることです。

上記のタスクの最初のタスク (ファイルをjava.io.Fileオブジェクトとして持つ必要があります) を達成できる場合、2 番目のタスクは簡単です。

AmazonS3 s3 = new AmazonS3Client(awsCredentials);
s3.putObject(new PutObjectRequest(bucketName, key, fileObj));

S3の簡易アップロードです。S3 Multipartupload は、ファイル全体をチャンクに分割し、各チャンクを並行してアップロードする場所です。S3 は、マルチパートアップロードを実現する 2 つの方法を提供します。

  • 低レベル- 各パーツのチャンク化とアップロードを行います。これは、あなたが言及したクラスを使用しますInitiateMultipartUploadRequest
  • 高レベル- この S3 では、TransferManagerクラスを使用してチャンク/アップロードなどのプロセスを抽象化します
于 2013-03-31T14:20:35.120 に答える