1

繰り返しますが、改札に問題がありました。別のページ「クラス A」に実装されているクラス「FileUploadPanel」でデータをアップロードしようとしています。

クラスA

...
/* uploadfields for Picture and Video */
ArrayList<String> picExt = new ArrayList<String>();
ArrayList<String> videoExt = new ArrayList<String>();
picExt.add("jpg");
videoExt.add("mp4");
final FileUploadPanel picUpload = new FileUploadPanel("picUpload", "C:\\", picExt);
final FileUploadPanel videoUpload = new FileUploadPanel("videoUpload", "C:\\", videoExt);

final Form form = new Form("form"){
      protected void onSubmit() {
      ...
      // Save the path of Video and Picture into Database
      table.setVideo(videoUpload.getFilepath());
      table.setPicture(picUpload.getFilepath());
      ...
}
...

クラス FileUploadPanel

public class FileUploadPanel extends Panel {

private static final long serialVersionUID = -2059476447949908649L;
private FileUploadField fileUpload;
private String UPLOAD_FOLDER = "C:\\";
private String filepath = "";
private List<String> fileExtensions;

/**
 * Constructor of this Class
 * @param id the wicket-id
 * @param uploadFolder the folder, in which the File will be uploaded 
 * @param fileExtensions List of Strings
 */
public FileUploadPanel(String id, String uploadFolder, List<String> fileExtensions) {
    super(id);
    this.UPLOAD_FOLDER = uploadFolder;
    this.fileExtensions = fileExtensions;
    add(fileUpload = new FileUploadField("fileUpload"));
}

@Override
public void onComponentTag(ComponentTag tag){
    // If no file is selected on startup
    if(fileUpload.getFileUpload() == null){
        return;
    }
    final FileUpload uploadedFile = fileUpload.getFileUpload();
    if (uploadedFile != null) {

        // write to a new file, 
        File newFile = new File(UPLOAD_FOLDER
            + uploadedFile.getClientFileName());
        filepath = UPLOAD_FOLDER + uploadedFile.getClientFileName();

        // if file in upload-folder already exists -> delete it
        if (newFile.exists()) {
            newFile.delete();
        }

        try {
            newFile.createNewFile();
            uploadedFile.writeTo(newFile);

            info("saved file: " + uploadedFile.getClientFileName());
        } catch (Exception e) {
            throw new IllegalStateException("Error");
        }
     }
}

public String getFilepath() {
    return filepath;
}

}

「クラス A」で送信ボタンを使用すると、Pic とビデオが C:\ に保存されます。ようやくウィケットと仲良くなったと思ったのに、応援が早すぎて…

問題: 正しいパスがデータベースに保存されず、「クラス A」の形式で処理されます。送信ボタンを使用するときに FileUploadPanel の onComponentTag(...) を実行する必要があるため、実際には取得できません。これは、onComponentTag(...) で「画像は JPG でなければならない、または保存されない」などの検証をいくつか追加したためです。確かに、フォームの送信ボタンが使用されると onComponentTag(...) が実行されます。これは、ファイルパスが最新である必要があることも意味します。

今回は何が間違っているのですか?

少し早いですがお礼を!

あいさつ V1nc3nt

4

1 に答える 1

0

あなたが使用している

File newFile = new File(UPLOAD_FOLDER + UploadFile.getClientFileName());

このコードで新しいファイルを作成します。

代わりに、これを試すことができます:

ファイル file = new File(UPLOAD_FOLDER , uploadedFile.getClientFileName());

次に、絶対パスを取得して保存します。

newFile.getAbsolutePath();

于 2012-12-31T06:49:15.047 に答える