<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
為什麼要用ajax來提交
在使用from提交時,瀏覽器會向伺服器傳送選中的檔案的內容而不僅僅是傳送檔名。
為安全起見,即file-upload 元素不允許 HTML 作者或 JavaScript 程式設計師指定一個預設的檔名。HTML value 屬性被忽略,並且對於此類元素來說,value屬性是唯讀的,這意味著只有使用者可以輸入一個檔名。當用戶選擇或編輯一個檔名時,file-upload 元素觸發 onchange 事件控制程式碼。
利用form提交會導致頁面重新整理,體驗不好,所以使用AJAX進行檔案上傳是個不錯的選擇。但這需要我們自己來組織通過POST請求傳送的內容
FormData物件
通過FormData物件可以組裝一組用 XMLHttpRequest傳送請求的鍵/值對。它可以更靈活方便的傳送表單資料,因為可以獨立於表單使用。如果你把表單的編碼型別設定為multipart/form-data ,則通過FormData傳輸的資料格式和表單通過submit() 方法傳輸的資料格式相同。 —— MDN web docs
enctype這個屬性管理的是表單的MIME編碼,它一共有三個屬性:
值 | 描述 |
---|---|
application/x-www-form-urlencoded | 在傳送前編碼所有字元(預設) |
multipart/form-data | 不對字元編碼,用來制定傳輸資料的特殊型別,如mp3、jpg |
text/plain | 純文字傳輸 |
value | 儲存了使用者指定的檔案的名稱 |
---|---|
type=“file” | 設定input型別為file |
multiple=“multiple” | 可多選,不設定為單選 |
accept=“…” | 設定可選檔案的MIME_type。在設定之後點選選擇檔案按鈕會預設顯示符合設定的MIME_type的檔案(存在相容性)。具體的檔案型別對應的MIME型別可以搜尋到,這裡列出我用到的型別: |
檔案型別 | MIME型別 |
---|---|
.txt | text/plain |
application/pdf | |
.doc | application/msword |
.docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
.xls | application/vnd.ms-excel |
.ppt | application/vnd.ms-powerpoint |
.pptx | application/vnd.openxmlformats-officedocument.presentationml.presentation |
<form id="uploadForm" method="post" enctype="multipart/form-data"> <label >上傳電子書</label> <input type="file" name="file" > <button id="upload" type="button" name="button" >上傳</button> </br> </br> </br> </form>
<script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/layer/3.5.1/layer.js "></script> <script> $("#upload").click(function(){ var formData = new FormData($('#uploadForm')[0]); $.ajax({ type: 'post', url: "{{ url_for('.regression_report') }}", //上傳檔案的請求路徑必須是絕對路勁 data: formData, cache: false, processData: false, contentType: false, success:function(data){ // 這裡是存取成功時被自動執行的程式碼 // 拆分返回值資訊(具體返回什麼東西就看檢視函數中定義的json格式) status_ret = data.status; errmsg_ret = data.errmsg; layer.msg(errmsg_ret); switch (status_ret){ case 0: setTimeout(function(){window.location.href = "{{ url_for('.regression_report') }}";},"2000"); break default: setTimeout(function(){window.location.href = "{{ url_for('.regression_report') }}";},"2000"); break } }, error:function(jqXHR){ // 這裡是存取失敗時被自動呼叫的程式碼 } }); }); </script>
當你的頁面樣式比較多的時候,可能上述方法無法傳入檔案,下面這種方法比較強,推薦看看
<form class="info" method="post" enctype="multipart/form-data"> <div class="form-group"> <label>File upload</label> <input id="id_regression_html" type="file" name="regression_html" class="file-upload-default"> <div class="input-group col-xs-12"> <input type="text" class="form-control file-upload-info" disabled="" placeholder="Upload Regression.html"> <span class="input-group-append"> <button id="html_upload" class="file-upload-browse btn btn-gradient-primary" type="button">Html Upload</button> </span> </div> </div> <button id="id_ajax_submit" type="button" class="btn btn-gradient-primary mr-2">Submit</button> </form>
<script src="https://cdn.bootcdn.net/ajax/libs/layer/3.5.1/layer.js "></script> <script> $("#id_ajax_submit").click(function(){ // var formData = new FormData($('#uploadForm')[0]); let formData = new FormData(); let my_file = document.getElementById('id_regression_html'); // @Param: <input name="regression_html"> // @Param: myFile.file[0]為第一個檔案(單選),多個檔案(多選)則要回圈新增 formData.append('regression_html',my_file.files[0]); $.ajax({ type: 'post', url: "{{ url_for('.regression_report') }}", //上傳檔案的請求路徑必須是絕對路勁 data: formData, cache: false, async: false, processData: false, //告訴jquery不要處理傳送的資料 contentType: false, //告訴jquery不要設定content-Type請求頭 success:function(data){ // 這裡是存取成功時被自動執行的程式碼 // 拆分返回值資訊(具體返回什麼東西就看檢視函數中定義的json格式) status_ret = data.status; errmsg_ret = data.errmsg; layer.msg(errmsg_ret); switch (status_ret){ case 0: setTimeout(function(){window.location.href = "{{ url_for('.regression_report') }}";},"2000"); break case 1: setTimeout(function(){window.location.href = "{{ url_for('.regression_report') }}";},"2000"); break default: setTimeout(function(){window.location.href = "{{ url_for('.regression_report') }}";},"2000"); break } }, error:function(jqXHR){ // 這裡是存取失敗時被自動呼叫的程式碼 } }); }); </script>
@admin_blu.route("/toolReg", methods=['GET', 'POST']) def regression_report(): if request.method == "GET": return render_template('index.html') elif request.method == "POST": # TODO: 獲取設定 # TODO: 獲取檔案 f = request.files.get('file') if f and f.filename.__contains__('.html'): upload_path = os.path.join(current_app.root_path, 'static/upload/html', f.filename) download_path = os.path.join(current_app.root_path, 'static/upload/html', 'xlsx') # TODO: 類範例化,同步執行 f.save(upload_path) ret = { "status": 0, "errmsg": "上傳成功" } return jsonify(ret) return redirect(url_for(".index.html"))
<form id="uploadForm" enctype="multipart/form-data"> <input type="file" name="file" multiple="multiple" /> </form> <button id="btnUpload">上傳檔案</button>
<script> $("#btnUpload").on("click", function(){ var formdata = new FormData($("#uploadForm")[0]); alert(formdata); $.ajax({ type: "post", url: "/Attendance/UploadFile2/",//url地址 contentType: false, cache: false, processData: false, data: formdata, success: function (data) { console.log(data); } }); }); </script>
//將formdata改用下面的方式試下 var formdata = new FormData(); var files = $("input[type='file']")[0].files; for (var i = 0; i < files.length; i++) { formdata.append("file", files[i]); }
到此這篇關於Python flask使用ajax上傳檔案的文章就介紹到這了,更多相關Python flask上傳檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45