javaweb上传和下载

174 阅读2分钟

web的上传文件和下载文件,是基于req和resq的,而javase是基于socket的,说到底都是同一个原理,将数据转换为流数据之后再传输。

    不过在上传数据时,post才能上传文件,且文件数据在请求体内,指定数据类型为mutilple/form-data,所以服务器端也需要将接收到的请求体内的数据解析出来,即使用ServletFileUpload来实现该解析功能,将不同表单项的数据分离出来,之后再用流数据的处理操作(类似javase)。 

   而下载数据则需要ServletContext对象获取web的资源文件信息,比如数据类型,数据流等,使用servletContext.getResourceAsStream(文件路径:/文件名)来获取流数据 /在服务器端代表http//:ip:port/工程名/ 即映射到web目录。 之后还需要resq来回传这些配置信息,在使用resq的outputstream来传输数据。

      之后再下载数据的时候,出现中文字符乱码,以为是字节流导致的错误,认为只有字符流才能对字符进行显示,其实只要完整获取到流数据之后在显示,就不会出现字符的字节被拆开而导致的乱码了。

      最早使用字符流进行字符数据的显示,主要是很方便,虽然流数据也行,但是需要获取完整流数据之后,而字符流可以一个一个的显示。

     之后到web这方面,很多数据其实是以字节流的形式获取的,例如 servletContext.getResourceAsStream("/file/" + name);只能以字节流的形式获取文件数据,

   虽然可以使用resq.writer向客户端发送字符数据,但这不能获取文件里面的字符数据。 例如: PrintWriter writer = resp.getWriter(); writer.write("服务器传来的数据");