Привет друзья, кто-нибудь может мне помочь. Как прочитать файл xlsx/csv из корзины AWS S3 в C# windows forms gridview. Ниже приведен мой код
private void btnUpload_Click(object sender, EventArgs e) { try { string bucketName = string.Empty, fileName = string.Empty;//, accessKey = string.Empty, SecretKey = string.Empty; this.Cursor = Cursors.WaitCursor; bucketName = "ben-s3lambdaevent"; //"ben-hrms"; fileName = string.Format("{0}", this.SoftCopyFileName); //AmazonS3 s3Obj = new AmazonS3(); string msg = UploadFile(bucketName, openFileDialog1.FileName, fileName); if (msg.ToUpper() == SUCCESS_MSG) { btnBrowse.Enabled = false; } DataTable table = new DataTable(); Amazon.RegionEndpoint region = Amazon.RegionEndpoint.APSouth1; table = GetS3SelectDetails(accessKey, SecretKey, bucketName, fileName, region); dgvGrid.DataSource = table; this.Cursor = Cursors.Default; } catch (Exception ex) { MessageBox.Show(ex.Message, TECHNO_MSG); //if (access == null) access = new BusinessConnector(); //access.DBConnector.ErrorLogInsert(ex.Message, "frmServiceInvoice.cs.btnBrowse_Click()"); } } public DataTable GetS3SelectDetails(string accessKey, string SecretKey, string bucketName, string fileName, Amazon.RegionEndpoint region) { DataTable dt = (DataTable)GetAmazonS3Select(accessKey, SecretKey, bucketName, fileName, region).Result; return dt; } public async Task<datatable> GetAmazonS3Select(string accessKey, string SecretKey, string bucketName, string fileName, Amazon.RegionEndpoint region) { DataTable table = new DataTable(); using (var eventStream = await GetSelectObjectContentEventStream(accessKey, SecretKey, bucketName, fileName, region)) { var recordResults = eventStream .Where(ev => ev is RecordsEvent) .Cast<recordsevent>() .Select(records => { using (var reader = new StreamReader(records.Payload, Encoding.UTF8)) { return reader.ReadToEnd(); } }).ToArray(); string[] fileData = recordResults[0].ToString().Split('\n'); for (int i = 0; i < fileData.Length; i++) { string[] rowData = fileData[i].ToString().Split(';'); if (i == 0) { for (int j = 0; j < rowData.Length; j++) { table.Columns.Add(rowData[j].ToString(), typeof(string)); } } else { DataRow row = table.NewRow(); for (int j = 0; j < rowData.Length; j++) { row[j] = rowData[j].ToString(); } table.Rows.Add(row); } } } return table; } public async Task<iselectobjectcontenteventstream> GetSelectObjectContentEventStream(string accessKey, string SecretKey, string bucketName, string fileName, Amazon.RegionEndpoint region) { SelectObjectContentResponse response1 = null; try { IAmazonS3 client1 = new AmazonS3Client(accessKey, SecretKey, region); SelectObjectContentRequest request = new SelectObjectContentRequest(); request.Bucket = bucketName; request.Key = fileName; request.ExpressionType = Amazon.S3.ExpressionType.SQL; request.Expression = "select * from S3Object"; request.InputSerialization = new InputSerialization() { CSV = new CSVInput() { FileHeaderInfo = FileHeaderInfo.Use //FieldDelimiter = ";", } }; request.OutputSerialization = new OutputSerialization() { CSV = new CSVOutput() { //QuoteFields = QuoteFields.Always FieldDelimiter = ";" } }; ------------ response1 = await client1.SelectObjectContentAsync(request); } catch (Exception ex) { } return response1.Payload; }
Что я уже пробовал:
после загрузки данных я не могу прочитать последний (response1 = await) курсор запущен, но дата не получает, пожалуйста, помогите мне
Gerry Schmitz
Если вы спрашиваете: "можно ли поддерживать мой код?" - нет.