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);
        }
Beispiel #3
0
        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);
        }
Beispiel #7
0
 public MultipartHelper()
 {
     this.boundary = MultipartHelper.GetBoundary();
 }
Beispiel #8
0
 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);
            }
        }