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工 ...
随机推荐
- tomcat之过滤器
过滤器是一种特殊的servlet,也需要在配置文件中进行配置,通过它可以将指定的请求拦截下来,之后对请求处理,处理完之后,将拦截请求放行.实现过滤器也需要实现一个接口叫javax. servlet.F ...
- c++库函数 Map
转载:https://blog.csdn.net/shuzfan/article/details/53115922 C++中map提供的是一种键值对容器,里面的数据都是成对出现的,如下图:每一对中的第 ...
- Python通过简单的文件读写,来实现注册登录
# -*- coding:utf-8 -*- '''''' username = input('请输入您的姓名:') password = input('请输入密码:') with open('get ...
- mysql 编码问题
有时候insert数据的时候,会报以下异常: ERROR 1366 (HY000): Incorrect string value: '\xE6\x9D\x83\xE9\x99\x90...' for ...
- RobotFramework环境配置:默认以管理员权限运行cmd
设置cmd以管理员权限运行 目的:创建或删除文件等命令时,需要管理员权限运行cmd(linux以root用户登录). 例如,创建日志目录. 方法一: 1.激活administrator用户 2 ...
- js 高阶函数 闭包
摘自 https://www.cnblogs.com/bobodeboke/p/5594647.html 建议结合另外一篇关于闭包的文章一起阅读:http://www.cnblogs.com/bob ...
- 如何把原生小程序项目合并的mpvue项目中
当时的情景是这样的: 使用mpvue写微信小程序,写着写着项目写到一半了,突然间不想这样继续写了,想切换回原生小程序语法去写剩余部分. 如下图,红色框里的功能是已经用mpvue完成的功能,绿色框部分的 ...
- robot framework 提示‘pybot 不是内部命令’
command: pybot.bat --argumentfile c:\*\RIDEzsxpul.d\argfile.txt --listener C:\Python27\lib\site-pack ...
- 插入排序(JAVA实现)
算法思想: 插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕 下图演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入. 代码实现: ...
- numpy交换列
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(x) x = x[:, [1, 0, 2]] print(x) 输出 [[1 2 3] [4 ...