最近用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学习之文本文件上传的更多相关文章

  1. Python学习---网络文件上传

    中心思想: 传递过去文件的大小,根据文件的大小判断是否文件上传完成: 传递/接受文件采用分流的形式,每次传递/接受部分数据:  文件的读取均采用绝对路径实现,而且是bytes的形式读写 客户端: # ...

  2. tcp上传学习二--文本文件上传

    //暮雪超霸.加油!!!package tcp文本上传; import java.io.BufferedReader; import java.io.FileReader; import java.i ...

  3. 七牛云存储Python SDK使用教程 - 上传策略详解

    文 七牛云存储Python SDK使用教程 - 上传策略详解 七牛云存储 python-sdk 七牛云存储教程 jemygraw 2015年01月04日发布 推荐 1 推荐 收藏 2 收藏,2.7k  ...

  4. MVC&WebForm对照学习:文件上传(以图片为例)

    原文  http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页::  ::  ::  ::管理 5 Posts :: 0 ...

  5. python Django之文件上传

    python Django之文件上传 使用Django框架进行文件上传共分为俩种方式 一.方式一 通过form表单进行文件上传 #=================================== ...

  6. python接收html页面上传的文件

    使用的 flask, 没有安装的先安装 pip install flask 示例代码:示例没有自动创建静态文件夹,需要自己在同级 创建一个名为 static 的文件夹来存放上传的文件 示例展示为图片 ...

  7. Python 基于Python实现Ftp文件上传,下载

    基于Python实现Ftp文件上传,下载   by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...

  8. python之实现ftp上传下载代码(含错误处理)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kait ...

  9. selenium+python自动化77-autoit文件上传

    前言 关于非input文件上传,点上传按钮后,这个弹出的windows的控件了,已经跳出三界之外了,不属于selenium的管辖范围(selenium不是万能的,只能操作web上元素).autoit工 ...

随机推荐

  1. 洛谷P3835 【模板】可持久化平衡树

    题目背景 本题为题目 普通平衡树 的可持久化加强版. 数据已经经过强化 感谢@Kelin 提供的一组hack数据 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作( ...

  2. 容器—stack

    c++ stl栈stack介绍 C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构. c++ stl栈stack的头文件 ...

  3. Python 学习笔记9 循环语句 For in

    For in 循环主要适用于遍历一个对象中的所有元素.我们可以使用它遍历列表,元组和字典等等. 其主要的流程如下:(图片来源于: https://www.yiibai.com/python/pytho ...

  4. [02-02 ]Java数据库链接范列

    /* 01 连接池版本的 数据库 连接管理工具,适合于并发场合 */ package cn.tedu.jdbc.day02; import java.io.InputStream; import ja ...

  5. Servlet(自己实现的Servlet)细节

    Java中无状态的对象就是指某种没用任何属性的仅仅由方法组成的对象. *无状态:无状态方法的好处之一,就是在各种环境下,都可以安全调用.衡量一个方法 是否有状态的,就看它是否改动了其他东西. *有状态 ...

  6. 附录A application.properties配置项

    摘自官网,仅作为参考用 Part X. Appendices # =================================================================== ...

  7. [vue开发记录]float label输入框

    上图: 组件代码: <!-- Created by Locke Ou on 2018/6/20. --> <template> <div> <div clas ...

  8. Delphi窗体显示Echarts图表

    笨办法,先保存用着 unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Varian ...

  9. 【PY】Python3.7+Anaconda3 + PyQt5 + Eric6

    Anaconda下载地址:https://www.continuum.io/downloads pip install pyenchant pip install QScintilla pip ins ...

  10. 【Solution】API测试工具,访问方式

    1. post的时候,@requestBody 用 json的传递方式