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工 ...
随机推荐
- solr 入门
这个博客写的不错,很详细 https://blog.csdn.net/wzy18210825916/article/details/80946454
- ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
约束字段为自动增长,被约束的字段必须同时被key约束 没有设置成primary key 时,会报错. 加上primary key 则设置成功.
- [archlinux]在linux使用aria2下载磁力链接
1.在公网出口做好dnat,端口映射,虚拟服务等.导致内网主机的udp和tcp端口上. 2.在linux主机上,加两条防火墙规则 ┬─[tong@T7:~]─[:: PM] ╰─>$ sudo ...
- 推荐一个Monokai风格的EditPlus配色方案
如何配置 找到EditPlus的配置文件editplus_u.ini,该文件默认在:系统盘:\Users\用户名\AppData\Roaming\EditPlus目录中.将其中的内容替换为如下即可: ...
- ASCII Unicode UTF-8 之间的关系
转载请标明:https://i.cnblogs.com/EditPosts.aspx?opt=1 1. ASCII ASCII 只有127个字符,表示英文字母的大小写.数字和一些符号,但由于其他语言用 ...
- Spring框架学习之--搭建spring框架
此文介绍搭建一个最最简单的spring框架的步骤 一.创建一个maven项目 二.在pom.xml文件中添加依赖导入spring框架运行需要的相关jar包 注意:在引入jar包之后会出现org.jun ...
- OC 应用跳转QQ私聊界面或者申请加群
申请加群 NSString *qq_number = QQ; NSString* urlStr = [NSString stringWithFormat:@"mqqapi://card/sh ...
- JavaScript 的if语句和==的判断
一. if(xx)的判断 JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值.系统内部会自动调用Boolean函数. 1.当if括号里面的表达 ...
- reduce函数
python中的reduce python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是 ...
- JVM TI
JVM TI JVM TI全名Java Virtual Machine Tool Interface,是开发虚拟机监控工具使用的编程接口,它可以监控JVM内部时间的执行,也可以控制JVM的某些行为,可 ...