こちらのサイトを参考に、AWSのS3へファイルのアップロードをしたいと考えております。
http://javatechnology.net/other/amazon-s3-fileupload/
jspは以下の通りで完成をしておりますが、servletでファイルを取得する際
Part型もしくは他の型(Listなど)となります。
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4<html> 5<head> 6<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7<title>Insert title here</title> 8</head> 9<body> 10<form action="/UploadServlet" method="post" enctype="multipart/form-data"> 11画像ファイル: 12<br> 13<input type="file" name="filename" multiple> 14<br> 15<br> 16<input type="submit" value="upload"> 17</form> 18</body> 19</html>
サーブレットは以下のようなものをイメージしております。
java
1package servlet; 2 3import java.io.File; 4import java.io.IOException; 5 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11import javax.servlet.http.Part; 12 13import AWS関連のファイル 14 15/** 16 * Servlet implementation class UploadServlet 17 */ 18@WebServlet("/UploadServlet") 19public class UploadServlet extends HttpServlet { 20 private static final long serialVersionUID = 1L; 21 22 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 23 doPost(request,response); 24 } 25 26 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 27 //アップされたファイルをpart型で取得 28 Part part = request.getPart("filename"); 29 30 //Part型で取得したファイルを何かしらの方法でFile型に変換 31 File file = ~~~~; 32 33 //AWS S3にアップロード 34 String bucketName = "bucket-name"; 35 String filePath = "/aiueo/"; 36 String fileName = "aiueo.jpeg"; 37 38 // ここで、accessKeyとsecretKeyを設定しています。 39 // Keyは、AwsCredentials.propertiesに設定しています 40 AmazonS3 s3 = new AmazonS3Client(new ClasspathPropertiesFileCredentialsProvider()); 41 42 s3.putObject(new PutObjectRequest(bucketName, filePath+fileName, file)); 43 44 } 45 46} 47
part型、List型など取得の方法にこだわりはないのですが、Servletでファイルを受け取った後どのようにすればFile型に変換できるのでしょうか?
もしくはFile型に変換しない形でServletからデータを受け取りS3にアップロードする方法は無いでしょうか?
皆様のお知恵をお貸し頂きたく。
今考えられる(実現可能性は置いといて)解決策は以下のものです。
1.Part型、List型で取得したファイルをPart型に変換
2.AWS S3にpart型でそのまま書き込めるAPI的なものを使用
3.part型で取得後、一時的に保存をしてFileオブジェクトに一時的に保存したファイルを再度読み込む
どうぞ、よろしくお願いします。
あなたの回答
tips
プレビュー