python学习之文本文件上传
最近用python的flask框架完成了一个最基本的文本文件上传,然后读取。
前端用的Angular的ng2-file-upload完成文件上传,后端用flask接收上传的文件,接着做处理。
在交互的过程中发现,当文本的编码格式不是UTF-8的时候(python3 默认的编码是UTF-8),会产生decode错误。
错误信息:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 0: invalid continuation byte
解决办法如下:
files = request.files['file'].read()
files_charset = chardet.detect(files)# 获取文件的编码格式
article = files.decode(files_charset['encoding'])# 按照文件的的编码格式读取文件内容
前端Angular的ts如下:
import { Component, OnInit } from '@angular/core';
import { FileUploader } from 'ng2-file-upload';
import {Router} from '@angular/router';
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';
@Component({
selector: 'app-file',
templateUrl: './file.component.html',
styleUrls: ['./file.component.scss']
})
export class FileComponent implements OnInit {
info = '点击这里选择文件';
formData = new FormData();
dataSource: Observable<any>;
uploader: FileUploader = new FileUploader({url: '/api/file'});
constructor( private router: Router, private http: HttpClient ) { }
ngOnInit() {
}
selectedFileOnChanged(event) { // 单文件上传,选择文件后显示文件名
if ( this.uploader.queue.length > 0 ) {
const file = this.uploader.queue[0]._file;
const fileName = this.uploader.queue[0]._file.name;
this.formData.append('file', file, fileName);
if ( fileName == '' ) {
this.info = '点击这里选择文件';
} else {
this.info = fileName;
}
} else {
this.info = '点击这里选择文件';
}
}
submit() {// 上传文件
const headers = new HttpHeaders();
headers.set('Content-Type', 'multipart/form-data');// 上传类型为文件
headers.set('Accept', 'application/json');// 接收json文件
this.dataSource = this.http.post('/api/file', this.formData, { headers: headers} );
this.dataSource.subscribe( data =>{
console.log(data);//接收数据
});
}
destroy() {// 清空文件缓存
this.uploader.clearQueue();
}
}
前端HTML页面如下:
<div class="row" xmlns="">
<div class="col-md-12">
<nb-card>
<nb-card-header>
<h4>选择需要分析的文件:</h4>
</nb-card-header>
<nb-card-body>
<div class="row high" ngForm>
<div class="col-md-3 col-lg-3 col-sm-3">
<a href="javascript:void(0);" class="file btn btn-hero-success btn-sm" (click)="destroy()">
<input type="file" ng2FileSelect [uploader]="uploader"
(change)="selectedFileOnChanged($event)" accept=".pdf,.doc,.docx,.txt"
name="file" />
{{ info }}
</a>
</div>
<div class="col-md-2 col-lg-2 col-sm-2">
<button type="submit" class="btn btn-hero-success btn-sm" (click)="submit()">提交文件</button>
</div>
<div class="col-md-7 col-lg-7 col-sm-7">
<span class="tip">提示:单文件分析,可传doc,docx,pdf,txt等文本文件。</span>
</div>
</div>
</nb-card-body>
</nb-card>
</div>
<router-outlet></router-outlet>
</div>
python学习之文本文件上传的更多相关文章
- Python学习---网络文件上传
中心思想: 传递过去文件的大小,根据文件的大小判断是否文件上传完成: 传递/接受文件采用分流的形式,每次传递/接受部分数据: 文件的读取均采用绝对路径实现,而且是bytes的形式读写 客户端: # ...
- tcp上传学习二--文本文件上传
//暮雪超霸.加油!!!package tcp文本上传; import java.io.BufferedReader; import java.io.FileReader; import java.i ...
- 七牛云存储Python SDK使用教程 - 上传策略详解
文 七牛云存储Python SDK使用教程 - 上传策略详解 七牛云存储 python-sdk 七牛云存储教程 jemygraw 2015年01月04日发布 推荐 1 推荐 收藏 2 收藏,2.7k ...
- MVC&WebForm对照学习:文件上传(以图片为例)
原文 http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页:: :: :: ::管理 5 Posts :: 0 ...
- python Django之文件上传
python Django之文件上传 使用Django框架进行文件上传共分为俩种方式 一.方式一 通过form表单进行文件上传 #=================================== ...
- python接收html页面上传的文件
使用的 flask, 没有安装的先安装 pip install flask 示例代码:示例没有自动创建静态文件夹,需要自己在同级 创建一个名为 static 的文件夹来存放上传的文件 示例展示为图片 ...
- Python 基于Python实现Ftp文件上传,下载
基于Python实现Ftp文件上传,下载 by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...
- python之实现ftp上传下载代码(含错误处理)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kait ...
- selenium+python自动化77-autoit文件上传
前言 关于非input文件上传,点上传按钮后,这个弹出的windows的控件了,已经跳出三界之外了,不属于selenium的管辖范围(selenium不是万能的,只能操作web上元素).autoit工 ...
随机推荐
- JMM(java Memory Model)到底是什么?
经历过很多面试大部分都会问一句: 你知道Java内存模型么? 然后我就pulapula的说一大堆什么堆呀,栈呀,GC呀什么的,这段时间把JVM虚拟机和多线程编程完整的学习了一遍,发现JMM和堆/栈这 ...
- 总结-shell脚本
执行脚本从 svn 检出项目 vi ace.sh #!/bin/bash svn export svn://127.0.0.1/ace/demo /ace/demo 设置脚本可执行 chmod +x ...
- foreach next 操作数组指针移动问题
2018年10月20日10:39:40 先说结论,foreach 维护的是一套属于自己的数组指针 会在操作数据的时候,分裂一套变量地址,即使你强制使用 & 取地址一样会分裂,不会引用同一套指针 ...
- SQL行转列与列转行(转)
原文: http://blog.csdn.net/jx_870915876/article/details/52403472 add by zhj: 本文是以MySQL为例说明的,但其实它适用于所有关 ...
- mysql中的count()函数
1.count()函数是用来统计表中记录的一个函数,返回匹配条件的行数. 2.count()语法: (1)count(*)---包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会 ...
- new Date() 日期格式处理
var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-???? ...
- Mockito常用方法及示例
Mockit是一个开源mock框架,官网:http://mockito.org/,源码:https://github.com/mockito/mockito 要使用Mockit,首先需要在我们工程中引 ...
- 2019CCF-GAIR全球人工智能与机器人峰会于7月在深圳召开
全球人工智能与机器人峰会(CCF-GAIR)是由中国计算机学会(CCF)主办,雷锋网.香港中文大学(深圳)承办,得到了深圳市政府的大力指导,是国内人工智能和机器人学术界.工业界及投资界三大领域的顶级交 ...
- 关于JS的原型与继承笔记
1.什么是原型? 原型就是公用的方法或者属性. 1.prototype本质上还是一个JavaScript对象: 2.每个函数都有一个默认的属性prototype,而这个prototype的constr ...
- 北京大学Cousera学习笔记--1-学习规划
1.计算机导论与C语言基础 1>.计算导论:计算机的基本原理.计算机的发展趋势.程序运行的基本原理 2>.C程序设计:感性认识C程序.理性认识C程序:机构化的程序-函数.更多的数据结构 2 ...