文件管理 · 2022年7月31日

表单文件流|nodejs怎么post文件流

1. form表单中的enctype="multipart/form-data"什么意思

enctype就是encodetype就是编码类型的意思。

multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。

需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-data,才能完整的传递文件数据。

application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件,multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传。

(1)表单文件流扩展阅读:

一、关于HTML <form> 标签的 enctype 属性

application/x-www-form-urlencoded:在发送前编码所有字符(默认)

multipart/form-data: 不对字符编码,或在使用包含文件上传控件的表单时,必须使用该值。

text/plain:空格转换为 "+" 加号,但不对特殊字符编码。

二、enctype:规定了form表单在发送到服务器时候编码方式,有如下的三个值。

1、application/x-www-form-urlencoded。默认的编码方式。但是在用文本的传输和MP3等大型文件的时候,使用这种编码就显得 效率低下。

2、multipart/form-data 。 指定传输数据为二进制类型,比如图片、mp3、文件。

3、text/plain。纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。

2. java http post 同时发送文件流与数据

您好,提问者:首先表单、文件同时发送那么肯定是可以的,关于获取的话很难了,因为发送文件的话form必须设置为:multipart/form-data数据格式,默认为:application/x-www-form-urlencoded表单格式。我们称之为二进制流和普通数据流。

刚才说了<form的entype要改为multipart/form-data才能进行发送文件,那么这个时候你表单的另外数据就也会被当成二进制一起发送到服务端。

获取读取过来的内容如下:

//拿到用户传送过来的字节流InputStreamis=request.getInputStream();byte[]b=newbyte[1024];intlen=0;while((len=is.read(b))!=-1){System.out.println(newString(b,0,len));}

上面如图的代码,我们发现发送过来的表单数据跟文件数据是混乱的,我们根本没办法解析(很麻烦),这个时候我们就需要用到第三方辅助(apache 提供的fileupload.jar)来进行获取。

这个网上有很多代码的,如果有什么不明白可以去自行网络,或者追问,我这里只是给你提供的思路,希望理解,谢谢!

3. 表单中enctype="multipart/form-data"的问题

我是用jsP的,目前也在苦恼这个问题, 用2进制来提交文件时,其他的提交项目就无法正常接受了, 一般在JSP中听高手说,可以自己分析输入流,然后解析,,但是太难了。ASP中, 不是有组件么.好象有的可以自己处理

4. html input标签 file类型,上传的具体是什么东西

上传你选择的文件和相关信息。在 HTML 文档中 <input type="file"> 标签每出现一次,一个 FileUpload 对象就会被创回建。该元答素包含一个文本输入字段,用来输入文件名,还有一个按钮,用来打开文件选择对话框以便图形化选择文件。该元素的 value 属性保存了用户指定的文件的名称,但是当包含一个 file-upload 元素的表单被提交的时候,浏览器会向服务器发送选中的文件的内容而不仅仅是发送文件名。

5. nodejs怎么post文件流

获取http请求报文头部信息

利用nodejs中的 http.ServerRequest中获取1):

request.method

用来标识请求类型

request.headers

其中我们关心两个字段:

content-type

包含了表单类型和边界字符串(下面会介绍)信息。

content-length

post数据的长度

关于content-type

get请求的headers中没有content-type这个字段

post 的 content-type 有两种

application/x-www-form-urlencoded这种就是一般的文本表单用post传地数据,只要将得到的data用querystring解析下就可以了

multipart/form-data文件表单的传输,也是本文介绍的重点

获取POST数据

前面已经说过,post数据的传输是可能分包的,因此必然是异步的。post数据的接受过程如下:

var postData = ''; request.addListener("data", function(postDataChunk) { // 有新的数据包到达就执行 postData += postDataChunk; console.log("Received POST data chunk '"+ postDataChunk + "'."); }); request.addListener("end", function() { // 数据传输完毕 console.log('post data finish receiving: ' + postData ); });

注意,对于非文件post数据,上面以字符串接收是没问题的,但其实 postDataChunk 是一个 buffer 类型数据,在遇到二进制时,这样的接受方式存在问题。

6. JS怎么获取表单file的值

我给个例子给你吧专:属

<script>functionhe(){varfile=document.getElementById("haa").files[0];console.log(file);alert(file['name']);}</script></head><body><inputtype="file"id="haa"onchange="he()"/></body></html>

7. Java中上传文件和表单数据提交如何质莸

//1.form表单//注:上传文件的表单,需要将form标签设置enctype="multipart/form-data"属性,意思是将Content-Type设置成multipart/form-data<form action="xxx" method="post" enctype="multipart/form-data"> <input type="text" name="name" id="id1" /> <br /><input type="password" name="password" /> <br /><input type="file" name="file" value="选择文件"/> <input id="submit_form" type="submit" value="提交"/> </form>//2.servlet实现文件接收的功能boolean isMultipart = ServletFileUpload.isMultipartContent(request);//判断是否是表单文件类型 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload sfu = new ServletFileUpload(factory); List items = sfu.parseRequest(request);//从request得到所有上传域的列表 for(Iterator iter = items.iterator();iter.hasNext();){ FileItem fileitem =(FileItem) iter.next(); if(!fileitem.isFormField()&&fileitem!=null){//判读不是普通表单域即是file System.out.println("name:"+fileitem.getName()); } } 3.扩展一下springboot@RequestMapping("/xxx")@ResponseBodypublic String handleFileUpload(@RequestParam("file") MultipartFile file) {if (!file.isEmpty()) {try {BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(file.getOriginalFilename())));System.out.println(file.getName());out.write(file.getBytes());out.flush();out.close();} catch (FileNotFoundException e) {e.printStackTrace();return "上传失败," + e.getMessage();} catch (IOException e) {e.printStackTrace();return "上传失败," + e.getMessage();}return "上传成功";} else {return "上传失败,因为文件是空的.";}}

8. 如何获取上传文件的输入流

我告诉你,什么都不用就可以实现基于WEB上传文件只要提交表单时候声明支持<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>File to process: <INPUT NAME="userfile1" TYPE="file"><INPUT TYPE="submit" VALUE="Send File"></FORM>然后从HTTP协议的Request中读取即可

9. form data 上传的是文件流吗

如果你说的是HTML5的 formdata的话,他发送的是一个你定义的formdata对象打包好的输出流,不是文件流。这个输出流服务器接收后不能直接生成文件需要进行解析的。你可以通过InputStream ips=request.getInputStream();得到这个输出流;

10. 怎么在form里分别上传多个文件,如图

可以用iframe上传,orm表单的method、 enctype属性必须和下面代码一样。然后将target的值设为iframe的name,这样就可以实现版无刷新上传权文件。<form action="uploadfile.php" enctype="multipart/form-data" method="post" target="iframeUpload"> <iframe name="iframeUpload" src="" width="350" height="35" frameborder=0 SCROLLING="no" style="display:NONE"></iframe> <input id="test_file" name="test_file" type="file"> <input value="上传文件" type="submit"> </form>