当前位置:首页 » 文件管理 » 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参数说明是上传还是下载。

热点内容
安卓网卡免驱动如何实现 发布:2024-05-18 15:25:15 浏览:859
8加6算法 发布:2024-05-18 15:04:25 浏览:737
名图16款尊享什么配置 发布:2024-05-18 14:55:37 浏览:584
我的世界怎样刷出32k服务器 发布:2024-05-18 14:32:32 浏览:565
c语言程序设计江宝钏 发布:2024-05-18 14:32:22 浏览:780
右击文件夹总是转圈圈 发布:2024-05-18 14:31:10 浏览:696
新建数据库phpmyadmin 发布:2024-05-18 14:22:38 浏览:736
安卓手机设备连接在哪里 发布:2024-05-18 14:08:28 浏览:820
路由器的密码最多是多少位 发布:2024-05-18 13:58:18 浏览:420
扫描服务器名称如何填 发布:2024-05-18 13:36:29 浏览:115