當前位置:首頁 » 文件管理 » rest上傳文件

rest上傳文件

發布時間: 2024-05-04 11:03:19

A. 在java的ctp中,客戶端文件上傳到服務端時候,老是出現connected rest異常,為什麼。代碼如下:

client中的out.flush()有問題。不能再循環內out.flush,它會向Server將你的OutputStream發送過去,然後你的伺服器取讀了一句話就寫入了一句話關閉了。下一個循環你再向伺服器推送數據就會發現連接關閉了。不知道正不正確。

關於使用Socket的flush過去無法readLine得到的問題
原因是這樣的:
flush方法只是將字元刷新過去。
readLine方法讀取一行數據,注意:一行數據是以 作為終止條件的。
flush過去的數據一般是沒有換行符的,所以就無法讀取。
為什麼有時候我們flush過去的卻能夠得到呢?有些時候,我們flush之後就沒有代碼了,然後代碼執行完自動將流close調,所以給它加上了換行符過去,所以readLine可以讀取到。
close方法也會刷新緩存流,並且會在數據結尾加上換行符。
這個很關鍵!

你可以嘗試在flush之前使用BufferedWriter的newLine();方法,這樣你會發現flush刷新過去的在伺服器端是可以讀取到的,不一定需要shutdownInputStream或者shutDownOutputStream。

newLine
publicvoidnewLine()
throwsIOException
寫入一個行分隔符。行分隔符字元串由系統屬性line.separator定義,並且不一定是單個新行(' ')符。

拋出:
IOException-如果發生I/O錯誤
close
publicabstractvoidclose()
throwsIOException
關閉此流,但要先刷新它。在關閉該流之後,再調用write()或flush()將導致拋出IOException。關閉以前關閉的流無效。

指定者:
介面Closeable中的close
拋出:
IOException-如果發生I/O錯誤
flush
publicvoidflush()
throwsIOException
刷新該流的緩沖。

指定者:
介面Flushable中的flush
指定者:
類Writer中的flush
拋出:
IOException-如果發生I/O錯誤
readLine
publicStringreadLine()
throwsIOException
讀取一個文本行。通過下列字元之一即可認為某行已終止:換行(' ')、回車(' ')或回車後直接跟著換行。
返回:
包含該行內容的字元串,不包含任何行終止符,如果已到達流末尾,則返回null

B. fegin鏂瑰紡鍙浠ョ洿鎺ヤ笂浼犳枃浠跺悧

鍦ㄤ竴鑸鎯呭喌涓嬶紝Fegin鏂瑰紡涓嶅彲浠ョ洿鎺ヤ笂浼犳枃浠躲
Fegin鏄涓涓鐢ㄤ簬鍦↗ava紼嬪簭涓璋冪敤REST API鐨勫伐鍏鳳紝瀹冮氬父鐢ㄤ簬鍙戦丠TTP璇鋒眰騫跺勭悊鍝嶅簲銆侳egin騫朵笉鐩存帴鏀鎸佹枃浠朵笂浼犵殑鍔熻兘銆傛枃浠朵笂浼犻氬父闇瑕侀氳繃multipart/form-data鏂瑰紡榪涜屾彁浜わ紝鑰孎egin鍦ㄩ粯璁ゆ儏鍐典笅騫朵笉鐩存帴鏀鎸佽繖縐嶆暟鎹鏍煎紡銆
鐒惰岋紝鉶界劧Fegin鏈韜涓嶈兘鐩存帴涓婁紶鏂囦歡錛屼絾鎴戜滑鍙浠ラ氳繃涓浜涘彉閫氱殑鏂規硶鏉ュ疄鐜版枃浠朵笂浼犵殑鍔熻兘銆傚叾涓涓縐嶅父瑙佺殑鏂瑰紡鏄浣跨敤絎涓夋柟搴擄紙濡係pring鐨凪ultipartFile錛夊皢鏂囦歡杞鍖栦負瀛楄妭嫻佹垨Base64緙栫爜鐨勫瓧絎︿覆錛岀劧鍚庨氳繃Fegin鍙戦佽繖涓瀛楃︿覆浣滀負璇鋒眰鐨勪竴閮ㄥ垎銆
渚嬪傦紝鎴戜滑鍙浠ュ湪Java涓浣跨敤Spring鐨凪ultipartFile鏉ュ勭悊鏂囦歡錛岀劧鍚庡皢鏂囦歡杞鎹涓哄瓧鑺傛祦鎴朆ase64緙栫爜鐨勫瓧絎︿覆錛
java
import org.springframework.web.multipart.MultipartFile;
MultipartFile file = ... // 鑾峰彇鏂囦歡
byte[] bytes = file.getBytes(); // 鑾峰彇瀛楄妭嫻
String encodedFile = Base64.getEncoder().encodeToString(bytes); // 杞鎹涓築ase64緙栫爜鐨勫瓧絎︿覆
鐒跺悗錛屾垜浠鍙浠ラ氳繃Fegin灝嗚繖涓瀛楃︿覆浣滀負璇鋒眰鍙傛暟鍙戦侊細
java
@FeignClient("file-upload-service")
public interface FileUploadClient {
@RequestMapping(method = RequestMethod.POST, value = "/upload")
String uploadFile(@RequestParam("file") String encodedFile);
}
鍦ㄨ繖涓渚嬪瓙涓錛屾垜浠灝嗘枃浠惰漿鎹涓築ase64緙栫爜鐨勫瓧絎︿覆錛岀劧鍚庨氳繃Fegin灝嗚繖涓瀛楃︿覆浣滀負璇鋒眰鍙傛暟鍙戦佺粰浜嗗悕涓"file-upload-service"鐨勬湇鍔°
闇瑕佹敞鎰忕殑鏄錛岃繖縐嶆柟寮忚櫧鐒跺彲浠ュ疄鐜版枃浠朵笂浼犵殑鍔熻兘錛屼絾鍙鑳戒細澧炲姞緗戠粶浼犺緭鐨勬暟鎹閲忥紙鍥犱負鏂囦歡浼氳杞鎹涓築ase64緙栫爜鐨勫瓧絎︿覆錛夛紝騫跺彲鑳介渶瑕佸勭悊澶ф枃浠朵笂浼犳椂鐨勫唴瀛樻秷鑰楅棶棰樸傚悓鏃訛紝鎺ユ敹絝涔熼渶瑕佸仛鐩稿簲鐨勮В鐮佸勭悊錛岃繖鍙鑳戒細澧炲姞澶勭悊鐨勫嶆潅鎬с
緇間笂鎵榪幫紝灝界Fegin鏈韜騫朵笉鐩存帴鏀鎸佹枃浠朵笂浼狅紝浣嗘垜浠鍙浠ラ氳繃涓浜涘彉閫氱殑鏂規硶鏉ュ疄鐜拌繖涓鍔熻兘銆傝繖浜涙柟娉曠殑鏁堢巼鍜屾槗鐢ㄦу彲鑳戒細鍙楀埌涓浜涘獎鍝嶏紝鎵浠ュ湪鍏蜂綋鐨勪嬌鐢ㄥ満鏅涓闇瑕佹潈琛¤繖浜涘洜緔犳潵閫夋嫨鏈鍚堥傜殑鏂規硶銆

C. restfull 怎麼實現一個上傳下載文件的介面,java後端代碼怎麼實現,怎麼上傳下載過程是怎麼進行的。

你好,你想復雜了,上傳和下載文件於普通的做法差不多,區別在於rest風格上傳文件要用post方法,下載用get方法,而且URL符合rest風格的要求即可

D. FTP該如何實現斷點續傳

客戶端的實現步驟如下:
一、下載:
1、向伺服器發送「REST + 本地文件長度」命令,告訴伺服器,客戶端要斷點下載了。這時伺服器還不知道客戶端要下載哪個文件;
要實現FTP的斷點續傳,FTP伺服器必須支持REST指令,這條指令在FTP協議文本RFC959中就已經定義了,不過它不是FTP伺服器必須支持的指令。一般,你可以在下載前使用REST 100命令進行實驗,如果伺服器正常執行了這條命令,說明該伺服器支持FTP斷點續傳。REST後面跟的數表示下載文件的起始位置,而REST 0表示從文件最開始處下載。REST命令本身並不執行下載功能,你仍需要使用RETR命令執行下載工作。
2、向伺服器發送「RETR + 文件名」命令,通知伺服器要下載的文件名,這時伺服器開始定位文件指針讀文件並發送數據。
3、客戶端定位本地文件指針(文件末尾);
4、兩端的准備工作都做完了以後,客戶端創建socket,以被動或非被動方式建立數據通道,循環調用recv接收數據並追加入本地文件;
二、上傳:
1、獲取伺服器上和本地要上傳文件的同名文件大小;
2、向伺服器發送「APPE + 文件名」,通知伺服器,接下來從數據通道發送給你的數據要附加到這個文件末尾。
3、定位本地文件指針(和FTP上文件大小相同的位置)
4、從文件指針處讀數據並發送。
代碼里將斷點上傳和斷點下載放到同一個函數(MoveFile)里,通過get參數說明是上傳還是下載。

熱點內容
vba獲取網頁表格資料庫資料庫資料庫 發布:2024-05-18 12:23:24 瀏覽:699
騰訊伺服器為什麼卡頓 發布:2024-05-18 12:02:12 瀏覽:305
如何知道密碼鎖有沒有nfc 發布:2024-05-18 11:58:09 瀏覽:961
單片機c語言模塊化編程 發布:2024-05-18 11:53:16 瀏覽:644
win7xp共享列印機拒絕訪問 發布:2024-05-18 11:51:00 瀏覽:847
zkeys金屬伺服器怎麼使用 發布:2024-05-18 11:49:31 瀏覽:581
電信路由器密碼設置無線路由器怎麼設置密碼 發布:2024-05-18 10:55:00 瀏覽:647
安卓系統是屬於哪個國家的手機 發布:2024-05-18 10:41:41 瀏覽:99
linux運維前景 發布:2024-05-18 10:24:44 瀏覽:658
c語言crc演算法 發布:2024-05-18 09:59:03 瀏覽:644