簡體   English   中英

無法在eclipse中使用localhost將文件上傳到Amazon S3存儲桶

[英]Cannot upload a file to amazon S3 bucket with localhost in eclipse

我正在嘗試通過網頁將文件上傳到Amazon S3存儲桶。

使用apache tomcat服務器在Eclipse中創建了“動態Web項目”。 創建一個JSP,Servlet和Java文件。 我使用了aws-java-sdk-1.11.335.jar文件。 試圖通過單擊提交按鈕上載圖像文件,發生未找到類異常。 可以幫忙解決此問題。

這是JSP,Servlet和類文件的代碼:

index.jsp

<form method="post" action="UploadFileServlet" enctype="multipart/form-data">
       <input type="submit" value="Upload" />
</form>

UploadFileServlet.java

@WebServlet("/UploadFileServlet")
public class UploadFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;


public UploadFileServlet() {
    super();
}


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    UploadFilestoAWSS3 uploadfilestoawss3 = new UploadFilestoAWSS3();
    uploadfilestoawss3.UploadFiles();

    PrintWriter out = response.getWriter();
    out.print("Files are uploaded to Bucket");

}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
}

UploadFilestoAWSS3.java

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CompleteMultipartUploadRequest;
import com.amazonaws.services.s3.model.InitiateMultipartUploadRequest;
import com.amazonaws.services.s3.model.InitiateMultipartUploadResult;
import com.amazonaws.services.s3.model.PartETag;
import com.amazonaws.services.s3.model.UploadPartRequest;
import com.amazonaws.services.s3.model.UploadPartResult;

public class UploadFilestoAWSS3 {

    public void UploadFiles() throws IOException {
        String clientRegion = "region";
        String bucketName = "bucket name";
        String filePath = "C:\\Users\\......\\imagefile.jpg";

        File file = new File(filePath);
        String keyName = file.getName();
        long contentLength = file.length();
        long partSize = 10 * 1024 * 1024; // Set part size to 10 MB. 

        try {
            BasicAWSCredentials awsCreds = new BasicAWSCredentials("Access Key", "Secret Key");
        AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                                .withRegion(clientRegion)
                                .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                                .build();

        List<PartETag> partETags = new ArrayList<PartETag>();

        InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, keyName);
        InitiateMultipartUploadResult initResponse = s3Client.initiateMultipartUpload(initRequest);

        long filePosition = 0;
        for (int i = 1; filePosition < contentLength; i++) {
            partSize = Math.min(partSize, (contentLength - filePosition));

            UploadPartRequest uploadRequest = new UploadPartRequest()
                    .withBucketName(bucketName)
                    .withKey(keyName)
                    .withUploadId(initResponse.getUploadId())
                    .withPartNumber(i)
                    .withFileOffset(filePosition)
                    .withFile(file)
                    .withPartSize(partSize);

            UploadPartResult uploadResult = s3Client.uploadPart(uploadRequest);
            partETags.add(uploadResult.getPartETag());

            filePosition += partSize;
        }

        CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(bucketName, keyName,
                initResponse.getUploadId(), partETags);
        s3Client.completeMultipartUpload(compRequest);
    }
    catch(AmazonServiceException e) {
        e.printStackTrace();
    }
    catch(SdkClientException e) {
        e.printStackTrace();
    }

}

}

錯誤是:

Type Exception Report

Message Servlet execution threw an exception

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)


Root Cause
java.lang.NoClassDefFoundError: com/amazonaws/AmazonServiceException
com.shiva.amazonaws.UploadFileServlet.doGet(UploadFileServlet.java:51)
com.shiva.amazonaws.UploadFileServlet.doPost(UploadFileServlet.java:64)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)


Root Cause
java.lang.ClassNotFoundException: com.amazonaws.AmazonServiceException
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1292)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1121)
com.shiva.amazonaws.UploadFileServlet.doGet(UploadFileServlet.java:51)
com.shiva.amazonaws.UploadFileServlet.doPost(UploadFileServlet.java:64)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

問題是找不到某些Amazon Web Services SDK類,特別是com.amazonaws.AmazonServiceException ,這是AWS開發工具包的基本異常類型-表示Java類路徑中可能缺少所有AWS開發工具包文件。

請注意,文件aws-java-sdk-1.11.335.jar並非完整的AWS開發工具包(正如人們可能想的那樣),僅包含一些元數據文件。 AWS Java SDK分為多個工件-因為它太大了,您不想對所有類都使用單個JAR文件,所以您只想為要使用的特定服務使用SDK。

因為您正在使用S3,所以您可能只需要S3 JAR及其依賴項,就可以在AWS S3 SDKMaven存儲庫頁面中看到。 請注意,依賴項之一是aws-java-sdk-core ,它是com.amazonaws.AmazonServiceException類所在的com.amazonaws.AmazonServiceException

您還可以在http://central.maven.org/maven2/com/amazonaws/aws-java-sdk-s3/下的POM文件中查看所有依賴項(並瀏覽目錄以收集所需的所有文件)。 1.11.335 /

通常,由於如今常見的復雜依賴關系結構,建議不要手動下載JAR,並將它們逐一放入Eclipse構建路徑,而應使用Maven。

如果您在Eclipse中有一個標准的Java項目,則可以在包資源管理器中右鍵單擊該項目的名稱,然后選擇“配置”->“轉換為Maven項目”,然后在打開的對話框中填寫一些詳細信息(*)。 之后,Eclipse將在項目的根目錄中創建一個pom.xml文件-打開它,您將獲得一個自定義編輯器來設置依賴項。 單擊標簽為“ Dependencies”的選項卡,然后單擊“ Add”,您應該可以搜索aws-java-sdk-s3 ,將其添加到您的依賴項列表中,然后Maven將自動下載所有必需的JAR文件並添加它們自動轉到您的構建路徑。

*)“組ID”通常是項目的頂層軟件包名稱,它看起來像是反向的域名-例如我的域是geek.co.il ,因此我的組ID將是il.co.geek “工件ID”是您的項目(例如my-project )的單個單詞標識符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM