文書を読み込んでインターネット上のヒントを検索するのに何時間も費やした結果、最終的にStack OverFlowアカウントを作成することにしました。必死に見える?ハハ、行こう。部品を使用したAmazon S3複数のファイルのアップロード
EDIT(05/16/2012):解決策が見つかったので(私自身が最後に)、私は古いコードを実行コードに置き換えました。
私はデータベースからイメージ(URL)レコードコレクションを取得する/ admin/lstimg(ListImage)に行きます。その後、コレクションはjspファイルのデータを使用できる属性として設定されます。
注:パブリッククラスListImageServletは、HttpServletを拡張し、MultipartConfigと注釈されています。
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
try
{
Collection images = ImageFacade.getIjc().findImageEntities();
request.setAttribute("images", images);
request.getRequestDispatcher("/adm/img/lstimg.jsp").forward(request, response);
}
catch (Exception ex)
{
Logger.getLogger(ListImageServlet.class.getName()).log(Level.SEVERE, "Cannot retrieve the images.", ex);
}
}
私のjspには、大きなフォームがあります(「画像」コレクションがあります)。ここでは、 "images"コレクションのデータを使用します。各画像について、第1列ではサムネイル、第2列ではファイル入力とする。私はこの(単一の)フォームを通じて複数の更新を実行しようとしています。
<form method="post" action="../admin/lstimg" enctype="multipart/form-data">
<table>
<thead>
<tr>
<th>Thumb</th>
<th>to update</th>
</tr>
</thead>
<tbody>
<c:forEach items="${images}" var="image">
<tr>
<td>
<img src="myURL" height="100"/>
</td>
<td>
<input type="file" name="${image.thumb}"/>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<input type="submit" value="Proceed" />
</form>
私の最初の質問は次のとおりです。 私は(キー)と同じ「image.thumb」を持つように新しいイメージを必要とするように、私は現在の「image.thumb」へのファイルの入力名を設定しますが、私のコンピュータ上のファイルを取り出す際にいくつかの問題があるのだろうかと疑問に思っていましたか?私のコンピュータ上の私のファイルは独自のパス/ファイル名を持ち、私のサーバ上のファイルは別のパス/ UUID(Key)を持っています。
EDIT(05/16/2012):AWSは(手動で設定する)ファイルパスを要求しないため、この問題は発生しません。
どのように形に見える(Web Browser)
私は/変更を更新する必要があるイメージ(複数可)を選びました後、私は(続行)送信ボタンをクリックしてください。
- すべてのパーツ(ファイル入力)を取得し、それらを「allParts」コレクションに格納します。
- "allParts"コレクションのすべての部分をチェックします。ファイルサイズが1b〜10Moの場合、その部分は "selectedParts"コレクションに追加されます。
- ここでは、私がやりたいことをする方法がわかりません...私のすべての画像はAmazon S3 Serverでホストされています。私はJets3t Toolkitを使用します。最初のアップロードでは、buildPostFormメソッド(下記)を呼び出し、すべてを行います。
S3Service.buildPostForm(String bucketName, String key, ProviderCredentials credentials, Date expiration, String[] conditions, String[] inputFields, String textInput, boolean isSecureHttp);
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
try
{
ImageCheck.initAS3(request);
ImageCheck.update(request, response);
}
catch (S3ServiceException ex)
{
Logger.getLogger(ListImageServlet.class.getName()).log(Level.SEVERE, null, ex);
}
catch (ServiceException ex)
{
Logger.getLogger(ListImageServlet.class.getName()).log(Level.SEVERE, null, ex);
}
catch (NoSuchAlgorithmException ex)
{
Logger.getLogger(ListImageServlet.class.getName()).log(Level.SEVERE, null, ex);
}
catch (IllegalStateException ex)
{
Logger.getLogger(ListImageServlet.class.getName()).log(Level.SEVERE, null, ex);
}
response.sendRedirect("../admin/lstimg");
}
私の2番目の質問は次のとおりです。 私は自分のフォームを使用して、サーブレットを介したファイルを変更/アップロードするには、私は私のS3Objectにファイルを設定する必要がありますが、私はしないでください私の "selectedParts"で何ができるかを知っていますか?パートをファイルに変更する方法はありますか? Part以外のものを使わなければならないのですか?
EDIT(2012年5月16日):私の英語のためのMy solution
申し訳ありません。 あなたの提案、アドバイス、回答をお寄せいただきありがとうございます。 コードに関するご質問がある場合や、もう少し必要な場合は、お気軽にお問い合わせください。
私はすでにこれを試しましたが、私のIS/OS(最終的には 'File'を得るために)をどうするべきか分かりません。私はこれを前に使ったことはありません...私はたくさんのことを試みましたが、すべてが失敗しました。 私のDBにはS3Object Keyだけがあり、私のAS3Sから簡単にイメージを取得できます。私が言ったように、私のすべてのイメージは、私のAmazon S3 Serverに保存されています(または新しいもの用です)。私の 'S3Bucket'に' S3Object'を格納するためには、 'File'をそれに"設定 "しなければなりません。だからこそ私は1つ必要です。 'public S3Object(java.io.File file)はjava.security.NoSuchAlgorithmException、java.io.IOException'をスローします。 – ltin