1. 程式人生 > >用Java實現FTP批量大檔案上傳下載(四)

用Java實現FTP批量大檔案上傳下載(四)

六、FTP埠對映

FTP的資料連線有PASV和PORT兩種,如果你的FTP伺服器位於內網中,需要做埠對映。筆者剛開始時對FTP的網外網對映也是不怎麼了解,因此開始走了不少的彎路,開始一直以為是自己的程式有問題,浪費了不少時間,希望通過這段,能讓大家在開發的時候少花或不花這些無謂的時間與精力。

PCD上曾經有一篇文章介紹過一種直接訪問內網的方法,其實我們只要用埠對映工具,就可輕鬆實現穿透內網的目的。“埠對映器”就是一款這樣的工具,更值得一提的是,它擺脫了命令列模式,提供了圖形介面的操作環境。

為了讓各位能更加明白,先說一下原理。假設現在有一個區域網,主機為A,區域網內除了主機外,還有一臺機器為B,B機器當然是通過主機A上網的。另外還有一臺可上網的機器為C,與A和B並不在一個區域網內。通常情況下,C機器只能訪問到A主機,而無法穿透區域網,訪問到B。而通過埠對映後,當C機器訪問主機A的指定埠時,主機A上的“埠對映器”就起作用了,它會把指定埠上的資料轉到區域網內另一臺機器的指定埠上,從而實現訪問內網機器的目的。這樣說,大家明白了吧。至於具體的如何進行配置,筆者認為應該不是件很難的事情,再說,網上這樣的圖形解釋很多,請大家參考網路上的文章進行設定。

當然,實現直接訪問內網的優點是顯而易見的,別的不說,起碼FTP資源是被充分利用了。不過必須提醒讀者的是,直接訪問內網可能使內網的安全性受到威脅。筆者相信大部分朋友對主機安全的重要性還是重視的,但往往會忽略內網機器的安全設定。一旦你實現了直接訪問內網,那就必須像對待主機一樣對待內網機器,否則你的整個網路將可能處於危險狀態。

六、    訪問客戶端資源

Java應用程式環境的安全策略,對於不同的程式碼所擁有的不同資源的許可,它由一個Policy物件來表達。為了讓Applet(或者執行在 SecurityManager下的一個應用程式)能夠執行受保護的行為,例如讀寫檔案,Applet(或 Java應用程式)必須獲得那項操作的許可,安全策略檔案就是用來實現這些許可。

Policy物件可能有多個實體,雖然任何時候只能有一個起作用。當前安裝的Policy物件,在程式中可以通過呼叫getPolicy方法得到,也可以通過呼叫setPolicy方法改變。Policy物件評估整個策略,返回一個適當的Permissions物件,詳細說明哪些程式碼可以訪問哪些資源。策略檔案可以儲存在無格式的ASCII檔案或Policy類的二進位制檔案或資料庫中。本文僅討論無格式的ASCII檔案的形式。

在實際使用中,我們可以不需要自己手動去編寫那麼複雜的java.policy檔案,特別是在不使用數字簽名時。這時,我們完全可以借鑑JRE提供給我們的現成的 C:\Program Files\Java\jre1.5.0_12\lib\security\java.policy檔案,根據我們的需要做相應的修改,本文就針對不使用數字簽名情況編寫安全策略檔案。下面,是一個完整的在Windows NT/XP下使用的java.policy檔案。在檔案中,分別使用註釋的形式說明了每個“permission”記錄的用途。當然,不同的程式對資源訪問許可權的要求可能不一樣,可以根據專案需要進行調整與選擇。

grant    { 
       //對系統和使用者目錄“讀”的許可權
       permission    java.util.PropertyPermission    "user.dir",    "read";   
       permission    java.util.PropertyPermission    "user.home",    "read";   
       permission    java.util.PropertyPermission    "java.home",    "read";   
       permission    java.util.PropertyPermission    "java.class.pat",    "read";   
       permission    java.util.PropertyPermission    "user.name",    "read";   
       //對執行緒和執行緒組的操作許可權
       permission    java.lang.RuntimePermission    "accessClassInPackage.sun.misc";   
       permission    java.lang.RuntimePermission    "accessClassInPackage.sun.audio";   
       permission    java.lang.RuntimePermission    "modifyThread";   
       permission    java.lang.RuntimePermission    "modifyThreadGroup";   
       permission    java.lang.RuntimePermission    "loadLibrary.*";   
       //讀寫檔案的許可權
       permission    java.io.FilePermission    "<<ALL    FILES>>",    "read";   
       permission    java.io.FilePermission    "${user.dir}${/}jmf.log",    "write";   
       permission    java.io.FilePermission    "${user.home}${/}.JMStudioCfg",    "write";   
       permission    java.net.SocketPermissio    "*",    "connect,accept";   
       permission    java.io.FilePermission    "C:\WINNT\TEMP\*",    "write";   
       permission    java.io.FilePermission    "C:\WINNT\TEMP\*",    "delete";   
       permission    java.awt.AWTPermission    "showWindowWithoutWarningBanner";   
       permission    javax.sound.sampled.AudioPermission    "record";   

    // //操作Socket埠的各種許可權
       permission    java.net.SocketPermission    "-",    "listen";    
       permission    java.net.SocketPermission    "-",    "accept";    
       permission    java.net.SocketPermission    "-",    "connect";    
       permission    java.net.SocketPermission    "-",    "resolve";    
       permission    java.security.AllPermission;    
     };

   grant    signedBy    "saili"    {  
       permission    java.net.SocketPermission    "*:1024-65535",    "connect,accept,resolve";    
       permission    java.net.SocketPermission    "*:80",    "connect";    
       permission    java.net.SocketPermission    "-",    "listen,    accept,    connect,    listen,    resolve",    signedBy    "ganja";    
       permission    java.net.SocketPermission    "-",    "accept";    
       permission    java.net.SocketPermission    "-",    "connect";    
       permission    java.net.SocketPermission    "-",    "resolve";    
       permission    java.security.AllPermission;    
     };

 

筆者在本專案中,為了使用客戶端的使用者設定更加的方便與簡單,將上面的檔案採用VB或C#來做成一個小程式來寫。然後將JRE及些exe共同打成一個EXE包,當JRE安裝完成後,此小程式負責找到JRE在作業系統中的安裝路徑,並在程式中寫出此java.policy檔案,覆蓋原有的檔案。如此一來,使用者就只需安裝一個EXE檔案,從而簡化了安裝的操作次數。

七、Applet回撥伺服器

JavaScript與Applet之間能夠相互通訊給我們帶來了很多方便,Java與JavaScript互相補充,以開發功能更完美的Web應用程式。B/S下能夠充分利用java的優勢,給我們帶來更多的網路體驗,方便使用者。筆者用的比較多的是利用Swing元件開發的應用程式利用Applet實現B/s下架構,這樣能夠充分顯示Swing元件的優勢,便於系統升級,便於維護;還有就是在WEB下,有時客戶端要使用本地的硬體資源,筆者所知道的是通過Applet來實現,通過Applet去呼叫javaAPI來實現。 我們具體來看看JavaScript與Applet之間到底是怎樣通訊的呢?

1.JavaScript訪問Applet

 <applet name="appletName" ....../>//JavaScript訪問Applet屬性。

window.document.appletName.appletField (屬性必須是public的,"window.document."也可以不寫) //JavaScript訪問Applet方法。

window.document.appletName.appletMethod (方法必須是public的,"window.document."也可以不寫)。

2.Applet訪問JavaScript

Live Connect提供了Java與JavaScript的介面,可以允許在Java Applet小程式中使用JavaScript。

需要用到一個jar包,在C:\Program Files\Java\目錄下找,大概有5M多,其實就是開啟看哪個有netscape.javascript.JSObject。如果沒有裝個NetScape或從網上下都可以。 可以把它重新命名為netscape.jar(不是必須的),一定要加入到classpath,目的是使開發的時候能夠編譯。特別注意的是:部署時不需要包括netscape.jar,因為整個包會下載到客戶端,影響速度。

//引入netscape類
import netscape.javascript.JSObject; 
import netscape.javascript.JSException; //可允許在小程式中處理異常事件
public void callJavaScript(String callBackJavascript) {
    JSObject window = JSObject.getWindow(this); // 獲取JavaScript視窗控制代碼,引用當前文件視窗
    JSObject docment = (JSObject) window.getMember("document");
        form=(JSObject)doc.getMember("textForm"); //訪問JavaScript form物件 
        textField=(JSObject)form.getMember("textField");訪問JavaScript text物件 
         text=(String) textField.getMember("value"); //獲取文字區的值
    // 呼叫JavaScript的alert()方法
    // window.eval("alert(\"This alert comes from Java!\")");
    window.call(callBackJavascript, null);// 引數用陣列的形式表示。
    }

相關推薦

Java實現FTP批量檔案下載()

六、FTP埠對映 FTP的資料連線有PASV和PORT兩種,如果你的FTP伺服器位於內網中,需要做埠對映。筆者剛開始時對FTP的網外網對映也是不怎麼了解,因此開始走了不少的彎路,開始一直以為是自己的程式有問題,浪費了不少時間,希望通過這段,能讓大家在開發的時候少花或不花這些

Java實現FTP批量檔案下載(一)

本文介紹了在Java中,如何使用Java現有的可用的庫來編寫FTP客戶端程式碼,並開發成Applet控制元件,做成基於Web的批量、大檔案的上傳下載控制元件。文章在比較了一系列FTP客戶庫的基礎上,就其中一個比較通用且功能較強的j-ftp類庫,對一些比較常見的功能如進度條、

Java實現FTP批量檔案下載(五) --執行效果圖

八、執行效果   1.上傳 (1).啟動上傳上面 (2).上傳中 (3).上傳中 (4).上傳成功 2.下載 (1)下載檔案的儲存路徑 (2)下載中 (3)下載中 (4)下載成功 九、小結 在本文中,筆者將在實際專案中的上傳下載

Java實現FTP批量檔案下載(五)

八、執行效果   1.上傳 (1).啟動上傳上面 (2).上傳中 (3).上傳中 (4).上傳成功 2.下載 (1)下載檔案的儲存路徑 (2)下載中  (3)下載中  (4)下載成功 九、小結 在本文中,筆者將在實際專案中的上傳下載問題的解決方案進行了闡述,通過採用FTP協

Java 使用 FTP 實現檔案下載

Java 上傳下載 1G 以上的檔案可以通過 http 協議或 ftp 實現,但是 http 協議對檔案上傳大小有限制,而且還不穩定,因此這裡使用 ftp 上傳。 ftp 上傳方式有兩種: 一、ASCII 傳輸方式:假定使用者正在拷貝的檔案包含

Java實現的SFTP(檔案詳解篇)

JSch是Java Secure Channel的縮寫。JSch是一個SSH2的純Java實現。它允許你連線到一個SSH伺服器,並且可以使用埠轉發,X11轉發,檔案傳輸等,當然你也可以整合它的功能到你自己的應用程式。 本文只介紹如何使用JSch實現的SFTP功能

基於Java的一個簡單的檔案下載功能

最近在公司給客戶端做介面,有一個圖片上傳和檔案下載的功能,本來想用Struts來做檔案上傳下載,但是看了下公司好像沒有這個配置,然後看了下同事的程式碼,才發現原來Apache也可以簡單的實現檔案上傳下載。 首先引入commons-io-2.2.jar FileUtils為我

Linux系統安裝rz/sz實現本地和伺服器檔案下載

一:說明     通過SecureCRT等SSH登入軟體連線伺服器,可以通過rz和sz命令上傳下載檔案,就不需要通過xftp進行檔案操作了. sz 檔名: 將選定的檔案傳送(send)到本地

java實現ftp檔案

實際專案需求:從資料庫查詢資訊,在本地生成檔案,再上傳到ftp 所用Jar包:NetComponents.jar 核心程式碼: import java.io.File; import java.io.FileInputStream; import java.io.IOExcepti

java實現檔案

檔案上傳是最古老的網際網路操作之一,20多年來幾乎沒有怎麼變化,還是操作麻煩、缺乏互動、使用者體驗差。 一、前端程式碼 英國程式設計師Remy Sharp總結了這些新的介面 ,本文在他的基礎之上,討論在前端採用HTML5的API,對檔案上傳進行漸進式增強: * iframe上傳    *

java實現從txt文字檔案批量匯入資料至資料庫

今天同事讓我準備一個專案的測試資料,要向一個表中插入上千條記錄,並且保證每條記錄內容不同,如果用手工一條一條插入肯定是不可能,也不會有哪個SB去做這樣的事,我最開始想到了用迴圈,但要求插入的記錄內容不能相同,用迴圈實現比較麻煩,於是我想到了將記錄從文字檔案匯入至資料庫(其實

java實現檔案下載ftp伺服器

以前做的一個專案,用到了檔案上傳下載至ftp伺服器,現在對其進行一下複習,比較簡單,一下就能看明白。 環境:首先,先安裝ftp伺服器,我是在win8本地用IIS配置的, 百度一下就可以找到安裝文件。 1.在你的專案目錄下建立ftp配置檔案,目錄如下圖

JAVA實現批量更改檔案字尾名的程式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

前端元件WebUploader檔案與Python結合的實現

Python實現大檔案分片上傳 引言 想借著這篇文章簡要談談WebUploader大檔案上傳與Python結合的實現。 WebUploader是百度團隊對大檔案上傳的前端實現,而後端需要根據不同的語言自己實現。這裡我採用Python語言的Flask框架搭建後端,

C#實現檔案功能(二)---webuploader

                                        一、問題來源 近些時候,處理專案的時候發現如果使用者上傳大檔案的時候使用HtmlInputFile通過httppostfilebase 來實現上傳,如果檔案較小的話較小的話,上傳沒有問題(4M)

Ftp實現自動讀取本地檔案到伺服器

需求:最近有個需求,類似需要將pre環境的oracle檔案,放到prd環境中hive叢集中儲存,但是因為資料來源和資料儲存節點不在一個環境中,所以無法通訊配置實現資料的直接傳輸。 解決方案:  1.寫指令碼自動將oracle中資料寫入到本地指定資料夾。  2.通過

Java實現檔案下載的三種解決方案

第一點:Java程式碼實現檔案上傳   FormFile file=manform.getFile();    String newfileName = null;   String newpathname=null;   String fileAddre="/numU

JAVA NIO SOCKET檔案伺服器

        當前很多手機應用或者是網路應用都需要支援大檔案上傳功能,有些用FTP來實現上傳但是FTP存在許多的問題。比如FTP的安全問題還有不支援GZIP壓縮等問題。採用SOCKET來實現檔案上傳,很輕鬆就可以實現斷點再續和負載均衡,將上傳後的檔案直接儲存到APACHE

java socket 實現c/s檔案下載功能+註冊登入

使用JAVA SOCKET實現c/s結構的通訊程式,以實現客戶端向伺服器端的檔案的上傳以及伺服器端向客戶端的檔案的下載。 實現思路: 1、在伺服器端,建立SocketServer物件,監聽某一埠,有連線請求則開一個執行緒處理這一請求 2、在客戶端,根據伺服器的ip地址以及埠號,建立

java ftp檔案下載刪除

package ftp; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStre