form表单上传文件

 
表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。
 
 
默认情况,enctype的编码格式是application/x-www-form-urlencoded,不能用于文件上传;
 
 
只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.
 
 

<wbr></wbr>

利用表单上传文件的例子:

<form id="form1" runat="server" enctype="multipart/form-data" >
<wbr><wbr><wbr> &lt;div&gt;<br><wbr><wbr><wbr> &lt;a id="addAttach" href="#"&gt;添加上传文件&lt;/a&gt;<br><wbr><wbr><wbr> &lt;div id="files"&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> &lt;input type="file" name="f1"/&gt;</wbr></wbr></wbr>

<wbr><wbr><wbr> &lt;input type="file" name="f2"/&gt;</wbr></wbr></wbr>

<wbr><wbr><wbr> &lt;/div&gt;<br><wbr><wbr><wbr> &lt;asp:Button ID="btnSend" runat="server" Text="发送" onclick="btnSend_Click" /&gt;<br><wbr><wbr><wbr> &lt;/div&gt;<br><wbr><wbr><wbr> &lt;/form&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr> protected void btnSend_Click(object sender, EventArgs e)<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> for (int i = 0; i &lt; <strong>Request.Files.Count</strong>; i++)<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> if (!string.IsNullOrEmpty(<strong>Request.Files[i].FileName</strong>))<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> Request.Files[i].SaveAs<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>(Path.Combine(Server.MapPath("files"), Path.GetFileName(Request.Files</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> [i].FileName)));<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

在 HTML 的 form 表单上传文件时,出于安全考虑,现代浏览器不允许直接获取文件的本地绝对路径。不过可以通过服务器端代码来处理文件上传并获取文件在服务器端存储的绝对路径。以下以 Flask 框架为例进行说明。 首先,需要创建表单验证类。新建 `form.py` 文件用于表单验证: ```python from wtforms import Form, FileField from flask_wtf.file import FileRequired, FileAllowed class UploadForm(Form): file = FileField(validators=[FileRequired(), FileAllowed(['jpg', 'png', 'gif'])]) ``` 上述代码定义了一个表单验证类 `UploadForm`,用于验证上传文件是否符合要求,要求文件必须存在且文件类型为 `jpg`、`png` 或 `gif` [^1]。 接着,创建 Flask 应用来处理文件上传: ```python from flask import Flask, request, render_template_string from form import UploadForm import os app = Flask(__name__) @app.route('/upload', methods=['GET', 'POST']) def upload(): if request.method == 'POST': form = UploadForm(request.files) if form.validate(): file = request.files['file'] # 获取项目的绝对路径 base_path = os.path.abspath(os.path.dirname(__file__)) # 定义上传文件的存储目录 upload_path = os.path.join(base_path, 'uploads') if not os.path.exists(upload_path): os.makedirs(upload_path) # 获取文件的完整存储路径 file_path = os.path.join(upload_path, file.filename) # 保存文件 file.save(file_path) return f"文件已成功上传到 {file_path}" else: return "文件上传失败,请检查文件类型" return ''' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form> </body> </html> ''' if __name__ == '__main__': app.run(debug=True) ``` 在上述代码中,首先导入必要的模块,然后创建 Flask 应用。定义 `/upload` 路由,当请求方法为 `POST` 时,对上传文件进行验证,如果验证通过,获取项目的绝对路径,创建上传文件的存储目录,将文件保存到指定目录,并返回文件在服务器端的绝对路径。当请求方法为 `GET` 时,返回一个包含文件上传表单的 HTML 页面。需要注意的是,表单中 `enctype="multipart/form-data"` 是必须的,因为默认的编码格式 `application/x-www-form-urlencoded` 不能用于文件上传,只有使用 `multipart/form-data` 才能完整地传递文件数据 [^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值