1

org.apache.commons.net.ftp.FTPClientJSF アプリケーションで使用したいと考えています。クライアント側 (Web ブラウザー) が大きなファイルを Web アプリケーション サーバーにアップロードする方法。RichFaces File Uploadまたはを使用してもPrimeFaces File Upload、クライアント ブラウザは を使用できますHTTP ProtocolFTP Protocolクライアント ブラウザをサポートするにはどうすればよいですか? より良い方法を提供できますか?

原因:アプリケーション ユーザーが直接アクセスできませんRepository Server(SVN)。まず、アプリケーションにファイルをアップロードする必要がありますWeb AS。そして、 へのcheckin/chekout申し込みRepositoryServer。アプリ利用者は、500M~2G以上のファイルをアップロードできます。FTP Protocolそのため、ブラウザクライアントをより高速にするためにどのようにサポートできるかを考えています。そうでなければ、私の考えは間違っていますか?

4

2 に答える 2

2

ファイルを FTP サーバーに送信できるようにするには、明らかに FTP クライアントが必要です。

ただし、Web ブラウザーは HTTP クライアントであり、FTP クライアントではありません。これは、Web ブラウザの自然な機能設計上の制限です。JSF は魔法使いのように見えますが、実際には何もできません。HTTP 要求/応答のみをインターセプトします。

確かに、あなたは間違って考えています。通常の HTTP の方法でファイルをアップロードすることに固執してください。なんらかの理由でこれに FTP が必要であると絶対に確信している場合、最善の策はおそらくこのための Java アプレットを自作することですが、これは結局のところ不器用です。

于 2012-09-20T12:20:22.687 に答える
0

最初に、primefaces を介して一時ディレクトリに HTTP アップロードを行います。次に、org.apache.commons.net.ftp.FTPClient または sun.net.ftp.FtpClient を介して、必要な FTP サーバーにアップロードします。

以下は例です。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import sun.net.ftp.FtpClient;

/**
 *
 * @author fali
 */
public class FtpUtil {

    public String server, username,password, remote, remotedir, local;
    FtpClient ftp;
    public static int BUFFER_SIZE = 10240;
    public FtpUtil(){
        server = "localhost";
        username = "anonymous";
        password = " ";
        remotedir = "/incoming";
        remote = "dvs.txt";
        local = "C:\\dvs.txt";

    }
    protected void putFile() {
    if (local.length() == 0) {
      System.out.println("Please enter file name");
    }
    byte[] buffer = new byte[BUFFER_SIZE];
    try {
      File f = new File(local);
      int size = (int) f.length();
      System.out.println("File " + local + ": " + size + " bytes");
      System.out.println(size);
      FileInputStream in = new FileInputStream(local);
      OutputStream out = ftp.put(remote);

      int counter = 0;
      while (true) {
        int bytes = in.read(buffer);
        if (bytes < 0)
          break;
        out.write(buffer, 0, bytes);
        counter += bytes;
        System.out.println(counter);
      }

      out.close();
      in.close();
    } catch (Exception ex) {
      System.out.println("Error: " + ex.toString());
    }
  }

    public String Upload(){
        String result="";
        try{
        ftp = new FtpClient(server);
        ftp.login(username, password);
        System.out.println(ftp.welcomeMsg);
        ftp.cd(remotedir);
        putFile();
        disconnect();
        }catch(Exception ex){
            System.out.println(ex);
            result = "Error : "+ex;
        }
        return "";
    }
    protected void disconnect() {
    if (ftp != null) {
      try {
        ftp.closeServer();
      } catch (IOException ex) {
      }
      ftp = null;
    }
  }
}

マネージドBean/コントローラーで;

public String create() {
        System.out.println("Request Button Clicked");
        try {
            // generate reference number
            //current.setReferenceno(genReferenceNo());
            // add to database 
            //getFacade().persist(current);

            // upload to ftp
            FtpUtil fu = new FtpUtil();
            fu.Upload();
            // show reference number

            JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("QueueCreated"));
            JsfUtil.addSuccessMessage("Your Reference No. is :" + current.referenceno);
            current = null;
//            try {
//                System.out.println("Redirecting");
//                FacesContext.getCurrentInstance().getExternalContext().dispatch("/");
//            } catch (Exception ex) {
//                System.out.println(ex);
//            }            
            return "";
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
            return null;
        }
    }

そして、あなたのページにこのようなものがあります。

<br />                    
                <ppctu:commandButton action="#{appointmentController.create}" type="Submit" value="Request" />
于 2012-10-01T11:46:21.830 に答える