public HttpStatusCode PostFile(string path, string fileName, string username, string password) { MultipartHelper.FileParameter f = new MultipartHelper.FileParameter(File.ReadAllBytes(path), fileName, "multipart/form-data"); Dictionary <string, object> parameters = new Dictionary <string, object>(); parameters.Add(fileName, f); return(MultipartHelper.MultipartFormDataPost(_request.RequestUri.AbsolutePath, parameters, username, password).StatusCode); }
public HttpStatusCode PostFile(byte[] data, string fileName, string mimeType, string username, string password) { MultipartHelper.FileParameter f = new MultipartHelper.FileParameter(data, fileName, "multipart/form-data"); Dictionary <string, object> parameters = new Dictionary <string, object>(); parameters.Add(fileName, f); parameters.Add("mimeType", mimeType); return(MultipartHelper.MultipartFormDataPost(_request.RequestUri.AbsoluteUri, parameters, username, password).StatusCode); }
public void WriteDocumentToDisk(string virtualFilePath, string physicalFilepath, string filename) { //Validazione degli argomenti if (string.IsNullOrWhiteSpace(virtualFilePath)) { throw new ArgumentNullException(nameof(virtualFilePath)); } if (string.IsNullOrWhiteSpace(physicalFilepath)) { throw new ArgumentNullException(nameof(physicalFilepath)); } string virtualFilePathLocation = virtualFilePath; MultipartHelper.WriteFromMultipart(filename, physicalFilepath, virtualFilePathLocation); }
/// <summary> /// Combines multiple requests into a batch to make these requests atomic, i.e. all req rollback if one fails /// Refer: https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/webapi/execute-batch-operations-using-web-api /// </summary> /// <returns> /// Task /// </returns> public async Task BatchUpdate(string rowGuid, string baseId, dynamic newData, string tableName) { var batchId = $"batch_batchid"; var changesetId = $"changeset_changesetid"; var dataverseRequests = new DataverseBatchRequest[2]; // Custom Update // 1. Mark old var updateTable = new DataverseTable(); updateTable.Islatest = Constant.IsLatestFalse; var updateTableJson = JsonConvert.SerializeObject(updateTable); dataverseRequests[0] = new DataverseBatchRequest("PATCH", $"https://{dataverseConfig.Value.ApiBaseUrl}/{tableName}({rowGuid})", updateTableJson); // 2. Insert row newData.Baseid = baseId; newData.Islatest = Constant.IsLatestTrue; // Mark latest row as "1" var newDataJson = JsonConvert.SerializeObject(newData); dataverseRequests[1] = new DataverseBatchRequest("POST", $"https://{dataverseConfig.Value.ApiBaseUrl}/{tableName}", newDataJson); // Build MultipartRequest content var reqContent = MultipartHelper.GenerateAtomicRequestContent(batchId, changesetId, dataverseRequests); dataverseClient.DefaultRequestHeaders.Accept.Clear(); UriBuilder requestUri = new UriBuilder("https", dataverseConfig.Value.ApiBaseUrl); requestUri.Path = "$batch"; // Execute Batch request var response = await dataverseClient.PostAsync(requestUri.Uri, reqContent); if (!response.IsSuccessStatusCode) { throw new DataverseException(Constant.InvalidUpdateDataColumns); } }
public async Task <IHttpActionResult> CreateFile() { if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } //Recupero il provider multipart //var provider = MultipartHelper.GetFromDataStreamProviderAsync(Path.GetTempPath()); var provider = MultipartHelper.GetFromDataStreamProviderAsync("~/App_data/temp"); await Task.Run(async() => await Request.Content.ReadAsMultipartAsync(provider)); FileDto dto = new FileDto(); Guid? registryId = null; if (provider.FormData.Get("registryId") != null) { registryId = new Guid(provider.FormData.Get("registryId")); } dto.Name = provider.FormData.Get("name"); dto.Size = provider.FormData.Get("size"); dto.Type = provider.FormData.Get("type"); dto.FilepathBodypart = provider.FileData != null && provider.FileData.Count > 0 ? provider.FileData[0].LocalFileName : string.Empty; var oResult = _fileService.CreateFile(dto, registryId); if (oResult.HasErrors()) { Log4NetConfig.ApplicationLog.Warn(string.Format("Errore durante l'upload di un File. Id: {0} - Errore: {1}", dto?.Id, oResult.GetValidationErrorsInline(" - "))); return(ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, oResult))); } dto = Mapper.Map <FileDto>(oResult.ReturnedValue); return(ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, dto))); }
void worker_DoWork(object sender, DoWorkEventArgs e) { MetaDataData[] metadata = mm.GetEventMetaData(eventId); for(int i = 0; i < metadata.Length; i++) { MetaDataData meta = metadata[i]; if (meta.Payload.GetType().Name == "Document") { Document doc = (Document)meta.Payload; if (doc.Location.StartsWith("http://dockets.sandiego.gov/sirepub")) { using (CustomWebClient webclient = new CustomWebClient()) { byte[] data = webclient.DownloadData(doc.Location); string url = string.Format("http://granicus.sandiego.gov/panes/EditEventMetaData.php?root_type=event&root_id={0}&meta_id={1}", eventId,meta.ID); webclient.Headers.Add("Cookie", mm.CookieContainer.GetCookieHeader(new Uri(url))); MultipartHelper helper = new MultipartHelper(); NameValueCollection props = new NameValueCollection(); props.Add("form_panel1_submit", "Save Changes"); props.Add("form_panel1_payload1", meta.Name); props.Add("form_panel1_payload2", ""); helper.Add(new NameValuePart(props)); MemoryStream stream = new MemoryStream(data); FilePart pdf = new FilePart(stream, "form_panel1_file", "application/pdf"); pdf.FileName = "fromsire.pdf"; helper.Add(pdf); helper.Upload(webclient, url, "POST"); } } } worker.ReportProgress((Int32) (((Double)(i + 1) / (Double)metadata.Length) * 100)); } worker.ReportProgress(100); }
public MultipartHelper() { this.boundary = MultipartHelper.GetBoundary(); }
public FilesCollection() { this.files = new List <FilePart>(); this.Boundary = MultipartHelper.GetBoundary(); }
/// <summary> /// Combines multiple requests into a batch to make these requests atomic, i.e. all req rollback if one fails /// Refer: https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/webapi/execute-batch-operations-using-web-api /// /// 1a. Mark existing record as old. Passing the record's GUID to be marked as old /// 1b. Insert updated record as new /// 2. Insert new record /// 3. Set baseId = inserted row's guid /// </summary> /// <returns> /// Task /// </returns> public async Task BatchUpdateAdd( string rowGuid, string baseId, dynamic updatedData, string updateTableName, dynamic newData, string newDataIdColumn, string addTableName) { var batchId = $"batch_batchid"; var changesetId = $"changeset_changesetid"; var dataverseRequests = new DataverseBatchRequest[3]; // 1a. Mark old (Custom Update) var updateTable = new DataverseTable(); updateTable.Islatest = Constant.IsLatestFalse; string jsonTestTable = JsonConvert.SerializeObject(updateTable); dataverseRequests[0] = new DataverseBatchRequest("PATCH", $"https://{dataverseConfig.Value.ApiBaseUrl}/{updateTableName}({rowGuid})", jsonTestTable); // 1b. Insert updated row updatedData.Baseid = baseId; updatedData.Islatest = Constant.IsLatestTrue; // Mark latest row as "1" var updatedDataJson = JsonConvert.SerializeObject(updatedData); dataverseRequests[1] = new DataverseBatchRequest("POST", $"https://{dataverseConfig.Value.ApiBaseUrl}/{updateTableName}", updatedDataJson); // 2. Insert new row newData.Islatest = Constant.IsLatestTrue; // Mark latest row as "1" var newDataJson = JsonConvert.SerializeObject(newData); // NOTE: Set preferResponse = true for atmost one API request in a batch var preferDataResponse = true; dataverseRequests[2] = new DataverseBatchRequest("POST", $"https://{dataverseConfig.Value.ApiBaseUrl}/{addTableName}", newDataJson, preferDataResponse); // Build MultipartRequest content var reqContent = MultipartHelper.GenerateAtomicRequestContent(batchId, changesetId, dataverseRequests); dataverseClient.DefaultRequestHeaders.Accept.Clear(); UriBuilder requestUri = new UriBuilder("https", dataverseConfig.Value.ApiBaseUrl); requestUri.Path = "$batch"; // Execute Batch request var response = await dataverseClient.PostAsync(requestUri.Uri, reqContent); if (!response.IsSuccessStatusCode) { throw new DataverseException(Constant.InvalidUpdateDataColumns); } // Return when data response was not requested if (!preferDataResponse) { return; } // 3. Set baseId = inserted row's guid var resString = await response.Content.ReadAsStringAsync(); // Get JSON data from the batch response var insertedRowJson = MultipartHelper.GetJsonData(resString); var insertedRow = JObject.Parse(insertedRowJson); var insertedRowGuid = Convert.ToString(insertedRow[newDataIdColumn], cultureInfo); // Create JSON for update operation i.e. set baseId = rowGuid of inserted row var table = new DataverseTable(); table.Baseid = insertedRowGuid; var jsonTable = JsonConvert.SerializeObject(table); var content = new StringContent(jsonTable, Encoding.UTF8, "application/json"); // Update operation requestUri = new UriBuilder("https", dataverseConfig.Value.ApiBaseUrl); requestUri.Path = $"{addTableName}({insertedRowGuid})"; response = await dataverseClient.PatchAsync(requestUri.Uri, content); if (!response.IsSuccessStatusCode) { throw new DataverseException(Constant.InvalidUpdateDataColumns); } }