protected void Page_Load(object sender, EventArgs e) { if (int.TryParse(Request.QueryString["id"], out var id)) { var table = BallotPediaCsvs.GetDataById(id); if (table.Count == 1 && !IsNullOrWhiteSpace(table[0].Content)) { Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=" + table[0].Filename); Response.Write("\xfeff"); // BOM Response.Write(AddUrlToCsv(table[0].Content)); } } Response.End(); }
protected void Page_Load(object sender, EventArgs e) { var result = new AjaxResponse(); try { // assume success unless an exception is thrown result.Success = true; // copy back the groupname and uploadid result.GroupName = Request.Form["groupname"]; result.UploadId = Request.Form["uploadid"]; // there should always be exactly one file if (Request.Files.Count == 0) { throw new VoteException("The upload file is missing"); } if (Request.Files.Count > 1) { throw new VoteException("Unexpected files in the upload package"); } // Test error handling //throw new VoteException("Some weird-ass error"); // get the file var postedFile = Request.Files[0]; var filename = postedFile.FileName; var saveAs = Request.Form["saveas"]; if (!string.IsNullOrWhiteSpace(saveAs)) { filename = saveAs; } if (!filename.EndsWith(".csv", StringComparison.OrdinalIgnoreCase)) { filename += ".csv"; } var duplicate = BallotPediaCsvs.FilenameExists(filename); if (duplicate && (Request.Form["overwrite"] != "true")) { throw new VoteException( "A CSV with this filename has already been uploaded. Either rename the file or check the 'overwrite existing file' box."); } // save the timestamp so the time we post to all the various tables matches // exactly... var uploadTime = DateTime.UtcNow; string csv; var coded = 0; var candidateCount = 0; using ( var csvReader = new CsvReader( new StreamReader(postedFile.InputStream, Encoding.UTF8), true)) { var headers = csvReader.GetFieldHeaders(); var normalizedHeaders = NormalizeHeaders(headers); var columnsToAdd = new List <string>(); if (!headers.Contains("VoteUSA Id")) { columnsToAdd.Add("VoteUSA Id"); } if (!headers.Contains("VoteUSA Url")) { columnsToAdd.Add("VoteUSA Url"); } using (var ms = new MemoryStream()) { var streamWriter = new StreamWriter(ms); var csvWriter = new SimpleCsvWriter(); // write headers foreach (var col in normalizedHeaders) { csvWriter.AddField(col); } foreach (var col in columnsToAdd) { csvWriter.AddField(col); } csvWriter.Write(streamWriter); while (csvReader.ReadNextRecord()) { foreach (var col in headers) { var value = csvReader[col]; csvWriter.AddField(value); if ((col == "VoteUSA Id") && !string.IsNullOrWhiteSpace(value)) { coded++; } } // ReSharper disable once UnusedVariable foreach (var col in columnsToAdd) { csvWriter.AddField(string.Empty); } csvWriter.Write(streamWriter); candidateCount++; } streamWriter.Flush(); ms.Position = 0; csv = new StreamReader(ms).ReadToEnd(); } } if (duplicate) { BallotPediaCsvs.DeleteByFilename(filename); } BallotPediaCsvs.Insert(filename, uploadTime, csv, candidateCount, coded, false); result.Message = "The CSV uploaded successfully."; } catch (Exception ex) { result.Success = false; result.Message = ex.Message; } WriteJsonResultToResponse(result); }