檔案的上傳(TCP)

來源:互聯網
上載者:User

標籤:exception   name   oid   讀取檔案   檔案內容   伺服器   nload   檔案名稱   檔案上傳   

問題描述:將本地檔案上傳(需將檔案名稱一起上傳)至指定伺服器,伺服器將上傳的檔案儲存至指定路徑下並檔案名稱添加首碼 "Downlod_原檔案名稱"。

思路: 用戶端需要一個輸入資料流來讀取本地檔案內容和檔案名稱;需要一個輸出資料流將讀取的檔案名稱發送至伺服器端,然後再將內容發送至伺服器端。

    伺服器端需要一個輸入資料流讀取檔案名稱和內容,需要一個輸出資料流將讀取到的檔案名稱添加首碼並將內容儲存至指定路徑即可;

 

用戶端範例程式碼:

 

 1 package Datagram; 2  3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.OutputStream; 6 import java.net.InetSocketAddress; 7 import java.net.Socket; 8  9 /*10  * 用戶端上傳本地檔案和檔案名稱至指定伺服器上11  */12 public class FileUploadDemo {13     public static void main(String[] args) throws Exception {14         //建立用戶端通訊端對象15         Socket s = new Socket();16         //綁定發送的伺服器位址和連接埠17         InetSocketAddress isa = new InetSocketAddress("localhost", 8080);18         //發起串連19         s.connect(isa);20         //擷取輸出資料流21         OutputStream os= s.getOutputStream();22         //尋找指定檔案23         File file = new File("D:\\test.jpg");24         //擷取檔案名稱25         String fileName = file.getName();26         //建立檔案輸入資料流27         FileInputStream fis = new FileInputStream(file);28         //寫入檔案長度(方便在服務端接收是需要知道傳遞的位元組長度)29         os.write(fileName.length());30         //寫入檔案名稱31         os.write(fileName.getBytes());32         //讀取指定檔案內容33         int len = -1;34         byte[] by = new byte[1024];35         while((len=fis.read(by))!=-1){36             //將檔案內容寫入輸出資料流中37             os.write(by,0,len);38         }39         //禁掉輸出資料流40         s.shutdownOutput();41         //關流42         s.close();43         fis.close();44         os.close();45         46     }47 }

 

伺服器端範例程式碼:

 1 package Datagram; 2  3 import java.io.FileOutputStream; 4 import java.io.InputStream; 5 import java.net.ServerSocket; 6 import java.net.Socket; 7  8 /* 9  * 伺服器端接收用戶端發送的檔案並儲存該檔案10  */11 public class FileDownloadDemo {12     public static void main(String[] args) throws Exception {13         //建立服務端通訊端對象14         ServerSocket ss = new ServerSocket(8080);15         //監聽串連並接收串連16         Socket s = ss.accept();17         //擷取輸入資料流對象18         InputStream is = s.getInputStream();19         //對檔案名稱的長度20         int fileNameLength = is.read();21         //按照讀出的檔案名稱的長度來存入位元組數組22         byte[] by = new byte[fileNameLength];23         //按傳遞的檔案名稱長度讀取一次便得到的既是檔案名稱24         is.read(by);25         26         String fileName = new String(by);27         //建立輸出資料流並更改輸出的檔案名稱28         FileOutputStream fis = new FileOutputStream("D:\\Downlod_"+fileName);29         //讀取檔案30         int len =-1;31         by = new byte[1024];32         while((len=is.read(by))!=-1){33             //將讀取到的資料寫入輸出資料流34             fis.write(by,0,len);35         }36         //禁掉輸入資料流37         s.shutdownInput();38         //關流39         fis.close();40         is.close();41         42     }43 }

 

檔案的上傳(TCP)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.