当前位置: 首页 > 知识库问答 >
问题:

如何上传csv文件并解析它?

舒飞捷
2023-03-14

在客户端,我使用AngularJS:

'uploadBulkUsersFile': {
                method: 'POST', url: CONFIG.apiServiceBaseUri + "api/users/bulkUsers",
                headers: {
                     "Content-Type": undefined
                },
                transformRequest: angular.identity,
                withCredentials: true
            },

并呼叫:

var _uploadBulkUsersFile = function (bulkUsersFile) {
    var fd = new FormData();
    fd.append("file", bulkUsersFile);

    return usersResource.uploadBulkUsersFile({}, fd, function (result) {
        return result;
    }).$promise;
};

在服务器端我使用WebAPI2:

    if (!Request.Content.IsMimeMultipartContent())
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);

    var provider = new MultipartMemoryStreamProvider();
    await Request.Content.ReadAsMultipartAsync(provider);
    foreach (var file in provider.Contents)
    {
        var buffer = await file.ReadAsStreamAsync();

        TextReader textReader = new StreamReader(buffer);
        var csv = new CsvReader(textReader);
        var records = csv.GetRecords<BulkUploadUser>().ToList();

        return Created("DefaultApi", records);
    }
data:application/vnd.ms-excel;base64,RW1haWwsRmlyc3ROYW1lLExhc3ROYW1lDQpwcm9zdG8uZHVkYUBnbWFpbC5jb20yLERlbmlzLER1ZGFpZXYNCnByb3N0by5kdWRhQGdtYWlsLmNvbSxEZW5pcyxEdWRhaWV2DQpwcm9zdG8uZHVkYUBnbWFpbC5jb20yLERlbmlzLER1ZGFpZXYNCg==
------WebKitFormBoundarySKPlgJRINOMnpxVP--
var buffer = await file.ReadAsStreamAsync();

TextReader textReader = new StreamReader(buffer);
var text = textReader.ReadToEnd();
var indexOfWord = "base64,";
var base64EncodedBytes = System.Convert.FromBase64String(text.Substring(text.IndexOf(indexOfWord) + indexOfWord.Length));
var encoded = System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
TextReader textReader2 = new StringReader(encoded);
var csv = new CsvReader(textReader2);
var records = csv.GetRecords<BulkUploadUser>().ToList();

共有1个答案

梁丘璞瑜
2023-03-14

您需要将base64编码的内容解码到您的文件中:

我如何编码和解码一个基本64字符串

您可以这样稍微整理一下代码:

string text;
using(TextReader textReader = new StreamReader(buffer))
     text = textReader.ReadToEnd();

CsvReader csv;

using(var ms 
   = new MemoryStream(Convert.FromBase64String(text.Substring(text.IndexOf(',') + 1)))
using (var textReader2 = new StreamReader(ms))
    csv = new CsvReader(textReader2);

var records = csv.GetRecords<BulkUploadUser>().ToList();
 类似资料:
  • 问题内容: 我想用php上传一个csv文件。上传文件后,我想显示CSV文件的数据。我想举一个如何完成这项任务的例子。 问题答案: 尽管您可以轻松找到如何使用php处理文件上传的教程,并且有一些功能(手动)可以处理CSV,但是我将发布一些代码,因为几天前我从事一个项目,其中包括一些代码,您可以采用… HTML: PHP: 我知道必须有一种更简单的方法来执行此操作,但是我读取了CSV文件并将每个记录的

  • 问题内容: 我正在尝试上传CSV文件,对其进行处理以产生结果,然后写回(下载)包含结果的新CSV文件。我对Flask非常陌生,无法获得“合适的” 对象进行迭代和处理。这是到目前为止的代码, 终端输出为 而我读的文件是 我在重复csv.reader对象时没有得到代表2行的2个列表,这是我做错了什么? 问题答案: 因此你的脚本存在一个主要问题,如此处所述,它需要一个文件对象或至少一个支持迭代器协议的对

  • 问题内容: 如何在Linux命令行上解析CSV文件? 做类似的事情: 从所有行的第2、5和6列中提取字段。 它应该能够处理csv文件格式:http : //tools.ietf.org/html/rfc4180,这意味着要对 字段进行引用并适当地转义内部引号 ,因此对于具有3个字段的示例行: 这样,如果我在上面的行中请求字段2,我得到: 我赞赏有很多解决方案,例如Perl,Awk(等等),但是我想

  • 问题内容: 我正在研究一个很长的Bash脚本。我想将CSV文件中的单元格读取到Bash变量中。我可以解析行和第一列,但不能解析其他任何列。到目前为止,这是我的代码: 它仅打印第一列。作为附加测试,我尝试了以下操作: $ y是空的。所以我尝试了: $ y是。为什么? 问题答案: 您需要使用而不是: 请注意,对于一般用途的CSV解析,您应该使用专门的工具,该工具可以处理带有内部逗号的带引号的字段,以及

  • 本文向大家介绍python 如何读、写、解析CSV文件,包括了python 如何读、写、解析CSV文件的使用技巧和注意事项,需要的朋友参考一下 您知道将表格数据存储到纯文本文件背后的机制是什么吗?答案是CSV(逗号分隔值)文件,该文件允许将数据转换为纯文本格式。在这篇文章中关于“在Python如何阅读CSV文件”中,我们将学习如何读,写和解析的CSV文件的Python。 将详细讨论以下方面: 什么