2017-05-06 256 views
0

我正在与一个javafx项目与谷歌auth2.0登录和亚马逊s3存储文件。我为此写了下面的代码。我有一个文件选择器用于将图像上传到s3。该应用程序与登录很好,但当我尝试上传文件到S3,它给出了一些例外,下面给出。我重视我下面的代码,请上传文件到亚马逊s3

main.java

package main; 
import controller.signupController; 
import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Scene; 
import javafx.scene.image.Image; 
import javafx.scene.layout.AnchorPane; 
import javafx.stage.Stage; 

public class Main extends Application { 

Stage signinStage,signupStage,mainSatge,decreptStage,profilestage,aws; 

@Override 
public void start(Stage primaryStage) throws Exception { 

     FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/signinScreen.fxml")); 
     AnchorPane pane=loader.load(); 
     Scene scene=new Scene(pane); 
     primaryStage.setScene(scene); 
     scene.getStylesheets().add(Main.class.getResource("/style/styleSheet.css").toExternalForm()); 
     primaryStage.setScene(scene); 
     primaryStage.getIcons().addAll(new Image("/src/Cornie-icons-00.png")); 
     primaryStage.setResizable(false); 
     primaryStage.show(); 
    } 

public void mainWindow(){ 
    try { 
     FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/mainScreen.fxml")); 
     AnchorPane pane=loader.load(); 
     Scene scene=new Scene(pane); 
     mainSatge=new Stage(); 
     mainSatge.setScene(scene);scene.getStylesheets().add(Main.class.getResource("/style/styleSheet.css").toExternalForm()); 
     mainSatge.setScene(scene); 
     mainSatge.getIcons().addAll(new Image("/src/Cornie-icons-00.png")); 
     mainSatge.setResizable(false); 
     mainSatge.show(); 
    }catch (Exception c){ 

    } 
} 

    public void signupWindow(){ 
    try { 
     FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/signupScreen.fxml")); 
     AnchorPane pane=loader.load(); 
     Scene scene=new Scene(pane); 

     signupController controller=loader.getController(); 
     controller.main(this, signupStage); 

     signupStage=new Stage(); 
     signupStage.setScene(scene);scene.getStylesheets().add(Main.class.getResource("/style/styleSheet.css").toExternalForm()); 
     signupStage.setScene(scene); 
     signupStage.getIcons().addAll(new Image("/src/Cornie-icons-00.png")); 

     signupStage.setResizable(true); 
     signupStage.show(); 
    }catch (Exception c){ 

    } 

} 


public void decreptWindow(){ 
    try { 
     FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/decreptImageScreen.fxml")); 
     AnchorPane pane=loader.load(); 
     Scene scene=new Scene(pane); 
     decreptStage=new Stage(); 
     decreptStage.setScene(scene);scene.getStylesheets().add(Main.class.getResource("/style/styleSheet.css").toExternalForm()); 
     decreptStage.setScene(scene); 
     decreptStage.getIcons().addAll(new Image("/src/Cornie-icons-00.png")); 
     decreptStage.setResizable(true); 
     decreptStage.show(); 
    }catch (Exception c){ 

    } 

} 

public void profilewindow(){ 
    try { 
     FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/profile.fxml")); 
     AnchorPane pane=loader.load(); 
     Scene scene=new Scene(pane); 
     profilestage=new Stage(); 
     profilestage.setScene(scene); 
     profilestage.getIcons().addAll(new Image("/src/Cornie-icons-00.png")); 
     profilestage.setResizable(false); 
     profilestage.show(); 
    }catch (Exception c){ 

    } 

} 

public void aws(){ 
    try { 
     FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/aws.fxml")); 
     AnchorPane pane=loader.load(); 
     Scene scene=new Scene(pane); 
     aws=new Stage(); 
     aws.setScene(scene); 
     aws.getIcons().addAll(new Image("/src/Cornie-icons-00.png")); 
     aws.setResizable(false); 
     aws.show(); 
    }catch (Exception c){ 

    } 

} 


public static void main(String[] args) { 
    launch(args); 
} 

}

mainController.java

package controller; 

import com.amazonaws.auth.AWSCredentials; 
import com.amazonaws.auth.BasicAWSCredentials; 
import com.amazonaws.services.s3.AmazonS3; 
import com.amazonaws.services.s3.AmazonS3Client; 
import com.amazonaws.services.s3.model.PutObjectRequest; 
import com.jfoenix.controls.JFXButton; 
import entity.imageEntity; 
import java.io.File; 
import java.net.MalformedURLException; 
import javafx.animation.FadeTransition; 
import javafx.animation.TranslateTransition; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Label; 
import javafx.scene.control.ListView; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.AnchorPane; 
import javafx.util.Duration; 
import main.Main; 
import org.kairos.components.RippleViewRow; 
import org.kairos.layouts.RecyclerView; 

import java.net.URL; 
import java.time.Instant; 
import java.time.temporal.ChronoUnit; 
import java.util.Date; 
import java.util.ResourceBundle; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javafx.event.EventHandler; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.shape.Circle; 
import javafx.stage.FileChooser; 

public class mainController implements Initializable { 

@FXML 
private JFXButton historyBTN; 

@FXML 
private JFXButton addBTN; 

@FXML 
private JFXButton DecryptimageBTN,logoutBTN; 

@FXML 
private JFXButton contactsBTN; 

@FXML 
private JFXButton profileBTN; 
@FXML 
private JFXButton aboutBTN; 

@FXML 
private Label nameLB; 

@FXML 
private Label loggedInEmail; 

@FXML 
private ImageView imageProfile; 

@FXML 
private Label usernameLB; 
@FXML 
private RecyclerView<imageEntity> recycleView; 

@FXML 
private AnchorPane blackPane; 

@FXML 
private AnchorPane drawerPane; 

@FXML 
private Label imageLink; 

@FXML 
private ImageView drawerIcon; 

boolean drawer_show=true; 

@FXML 
private ImageView imageUpload; 

@FXML 
private ImageView img; 


@Override 
public void initialize(URL location, ResourceBundle resources) { 

    loggedInEmail.setText(Web.getLoggedIn().getDisplayName()); 
    imageLink.setText(Web.getLoggedIn().getBirthday()); 
    usernameLB.setText(Web.getLoggedIn().getGender()); 
    imageProfile.setImage(new Image(Web.getLoggedIn().getImage().getUrl())); 
    imageProfile.setClip(new Circle(100)); 

    blackPane.setVisible(false); 
    FadeTransition fadeTransition=new FadeTransition(Duration.seconds(1),blackPane); 
    fadeTransition.setFromValue(1); 
    fadeTransition.setToValue(0); 
    fadeTransition.play(); 

    TranslateTransition translateTransition=new TranslateTransition(Duration.seconds(1),drawerPane); 
    translateTransition.setToX(-500); 
    translateTransition.play(); 

    drawerIcon.setOnMouseClicked(event -> { 
     if (drawer_show==true){ 
      blackPane.setVisible(true); 

      FadeTransition fadeTransition1=new FadeTransition(Duration.seconds(1),blackPane); 
      fadeTransition1.setFromValue(0); 
      fadeTransition1.setToValue(0.12); 
      fadeTransition1.play(); 

      TranslateTransition translateTransition1=new TranslateTransition(Duration.seconds(1),drawerPane); 
      translateTransition1.setToX(0); 
      translateTransition1.play(); 
      drawer_show=false; 
      drawerIcon.setImage(new Image("/src/left_arrow.png")); 
     }else { 
      FadeTransition fadeTransition0=new FadeTransition(Duration.seconds(1),blackPane); 
      fadeTransition0.setFromValue(0.12); 
      fadeTransition0.setToValue(0); 
      fadeTransition0.play(); 
      fadeTransition0.setOnFinished(event1 -> { 
       blackPane.setVisible(false); 
      }); 
      TranslateTransition translateTransition0=new TranslateTransition(Duration.seconds(1),drawerPane); 
      translateTransition0.setToX(-500); 
      translateTransition0.play(); 
      drawerIcon.setImage(new Image("/src/drawer.png")); 
      drawer_show=true; 

     } 
    }); 

    blackPane.setOnMouseClicked(event -> { 
     FadeTransition fadeTransition0=new FadeTransition(Duration.seconds(1),blackPane); 
     fadeTransition0.setFromValue(0.12); 
     fadeTransition0.setToValue(0); 
     fadeTransition0.play(); 
     fadeTransition0.setOnFinished(event1 -> { 
      blackPane.setVisible(false); 
     }); 
     TranslateTransition translateTransition0=new TranslateTransition(Duration.seconds(1),drawerPane); 
     translateTransition0.setToX(-500); 
     translateTransition0.play(); 
     drawerIcon.setImage(new Image("/src/drawer.png")); 
     drawer_show=true; 
    }); 

    profileBTN.setGraphic(new ImageView(new Image("/src/ic_account_circle_black_24dp.png"))); 
    historyBTN.setGraphic(new ImageView(new Image("/src/ic_assignment_black_24dp.png"))); 
    contactsBTN.setGraphic(new ImageView(new Image("/src/ic_contacts_black_24dp.png"))); 
    aboutBTN.setGraphic(new ImageView(new Image("/src/ic_error_outline_black_24dp.png"))); 
    DecryptimageBTN.setGraphic(new ImageView(new Image("/src/ic_error_outline_black_24dp.png"))); 
    logoutBTN.setGraphic(new ImageView(new Image("/src/ic_power_settings_new_black_24dp.png"))); 

    DecryptimageBTN.setOnAction(event -> { 
     new Main().decreptWindow(); 
    }); 

    profileBTN.setOnAction(event -> { 
     new Main().profilewindow(); 
    }); 

    contactsBTN.setOnAction(event -> { 
     new Main().aws(); 
    }); 

    Adapter adapter=new Adapter(); 

    imageEntity imageEntity=new imageEntity(); 
    imageEntity.setImageSrc("/src/preview_tom-clancys-rainbow-six-siege-ubisoft-montreal2.jpg"); 
    imageEntity.setName("Image Name: Test Image"); 
    imageEntity.setDate("Date Uploaded: 23-04-2017"); 
    imageEntity.setPrice("Price: $3.5"); 

    recycleView.setAdapter(adapter); 
    recycleView.getItems().addAll(imageEntity,imageEntity,imageEntity,imageEntity,imageEntity); 

addBTN.setOnMouseClicked(new EventHandler<MouseEvent>() { 

     public void handle(MouseEvent event) { 
      FileChooser fileChooser=new FileChooser(); 
      fileChooser.setInitialDirectory(new File("c:\\")); 
      fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("JPG Images","*.jpg"), 
        new FileChooser.ExtensionFilter("JPEG Images","*.jpeg"), 
        new FileChooser.ExtensionFilter("PNG Images","*.png")); 
      File file=fileChooser.showOpenDialog(null); 

      if (file!=null){ 
       AWSCredentials Credentials = new BasicAWSCredentials(
         "client key", 
         "client secret"); 
       AmazonS3Client amazonS3Client = new AmazonS3Client(Credentials); 
       String bucketName = "awsimagetrading"; 
       String key = file.getName(); 
       System.out.println("Uploading a new object to S3 from a file\n"); 
       AmazonS3 s3client = new AmazonS3Client(Credentials); 
       s3client.putObject(new PutObjectRequest(bucketName,key,file)); 
       URL url = amazonS3Client.generatePresignedUrl(bucketName,key,Date.from(Instant.now().plus(5,ChronoUnit.MINUTES))); 
       System.out.println(url); 
       //img.setImage(new Image(file.toURI().toURL().toExternalForm())); 

      } 
     } 
    });  

} 


public class Adapter extends RecyclerView.Adapter<Adapter.Holder> { 

    @Override 
    public RecyclerView.ViewRow call(ListView listView) { 
     return new RippleViewRow(this); 
    } 

    @Override 
    public Holder onCreateViewHolder(FXMLLoader fxmlLoader) { 
     fxmlLoader.setLocation(mainController.class.getResource("/view/imageCardViewScreen.fxml")); 
     Holder holder = new Holder(fxmlLoader); 
     return holder; 
    } 


    @Override 
    public void onBindViewHolder(Holder holder, Object o) { 

     imageEntity imageEntity = (imageEntity) o; 
     holder.imageView.setImage(new Image(imageEntity.getImageSrc())); 
     holder.name.setText(imageEntity.getName()); 
     holder.price.setText(imageEntity.getPrice()); 
     holder.date.setText(imageEntity.getDate()); 

    } 

    public class Holder extends RecyclerView.ViewHolder { 
     @FXML 
     private Label date; 

     @FXML 
     private JFXButton download; 

     @FXML 
     private Label price; 

     @FXML 
     private Label name; 

     @FXML 
     private ImageView imageView; 

     public Holder(FXMLLoader loader) { 
      super(loader); 
     } 
    } 

    } 

}

例外

enter code hereException in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: org/apache/http/util/Args 
at org.apache.http.conn.scheme.Scheme.<init>(Scheme.java:91) 
at org.apache.http.impl.conn.SchemeRegistryFactory.createDefault(SchemeRegistryFactory.java:50) 
at com.amazonaws.http.ConnectionManagerFactory.createPoolingClientConnManager(ConnectionManagerFactory.java:29) 
at com.amazonaws.http.HttpClientFactory.createHttpClient(HttpClientFactory.java:97) 
at com.amazonaws.http.AmazonHttpClient.<init>(AmazonHttpClient.java:164) 
at com.amazonaws.AmazonWebServiceClient.<init>(AmazonWebServiceClient.java:119) 
at com.amazonaws.AmazonWebServiceClient.<init>(AmazonWebServiceClient.java:103) 
at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:357) 
at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:339) 
at controller.AWSUpoladController$1.handle(AWSUpoladController.java:64) 
at controller.AWSUpoladController$1.handle(AWSUpoladController.java:47) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470) 
at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766) 
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417) 
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416) 
at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
at com.sun.glass.ui.View.notifyMouse(View.java:937) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: org.apache.http.util.Args 
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

当我使用Amazon S3的单独它工作正常,但不工作时,我试图把它与我的应用程序集成。你能帮我找出问题吗?先谢谢了。

回答

0

是的我的答案。问题在于图书馆。如果你们遇到与此相关的问题,只需使用适当的库版本,并解决它。