コード例 #1
0
        public HttpResponseMessage SaveLogHQ()
        {
            try
            {
                HttpMultipartParser.MultipartFormDataParser parser = new HttpMultipartParser.MultipartFormDataParser(HttpContext.Current.Request.InputStream);

                var Files = parser.Files;

                var user = ((PtcIdentity)this.User.Identity).currentUser;

                string url = ServerProfile.GetInstance().LOG_PATH;

                if (Files == null || Files.Count() == 0)
                {
                    throw new ArgumentNullException($"[ERROR]=>上傳LOG FILE時,並未給入檔案");
                }

                foreach (var file in Files)
                {
                    string fullPath = $"{url}/{user.CompCd}/{user.RoleId}/{user.UserId}/";

                    FileUtil.Save(fullPath, file.Name, file.Data);
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex.Message);
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest,
                                                   $"{ ex.GetType().Name}:message:{ex.Message}"));
            }

            return(Request.CreateResponse(
                       HttpStatusCode.OK,
                       new JsonResult <Boolean>(true, "上傳LOG FILE成功", 1, true)));
        }
コード例 #2
0
        public HttpResponseMessage Test()
        {
            try
            {
                HttpMultipartParser.MultipartFormDataParser parser = new HttpMultipartParser.MultipartFormDataParser(HttpContext.Current.Request.InputStream);
            }
            catch (Exception ex)
            {
                _logger.Error(ex.Message);
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest,
                                                   $"{ ex.GetType().Name}:message:{ex.Message}"));
            }

            return(null);
        }
コード例 #3
0
        /// <summary>
        /// IHttpRequestHandler.OnRequest internal handler
        /// </summary>
        internal void onRequest(HttpRequestHead head, IDataProducer body, IHttpResponseDelegate response)
        {
            RESTMethod method;
            if (Enum.TryParse<RESTMethod>(head.Method, out method))
            {
                Pair<ResourceInstance, object[]> resourceParameterPair = retrieveResource(head.Path, method);
                ResourceInstance resource = resourceParameterPair.V1;
                object[] resourceParameters = resourceParameterPair.V2;
                if (resource != null)
                {
                    ResourceMethod resourceMethod = resource.GetResourceMethod(method);
                    if (resourceMethod != null)
                    {
                        if (resourceMethod.Parameters.Length == resourceParameters.Length + 1)
                        {
                            NameValueCollection getQuery = HttpUtility.ParseQueryString(head.QueryString ?? "");
                            // now, if it's a POST, read POST data then
                            if (method == RESTMethod.POST)
                            {
                                var consumer = new BufferedConsumer(bufferedBody =>
                                {
                                    HttpMultipartParser.MultipartFormDataParser parser = new HttpMultipartParser.MultipartFormDataParser(new MemoryStream(Encoding.Default.GetBytes(bufferedBody)));
                                    NameValueCollection postQuery = new NameValueCollection();
                                    foreach (var param in parser.Parameters)
                                        postQuery.Add(param.Key, param.Value.Data);
                                    Context invocationContext = new Context(new Request(head, postQuery, getQuery));
                                    giveResponse(resourceMethod, invocationContext, response, resourceParameters);
                                }, error =>
                                {
                                    _logger.Error("IDataProducer.Connect failed", error);
                                });

                                body.Connect(consumer);
                            }
                            else
                            {
                                Context invocationContext = new Context(new Request(head, getParameters: getQuery));
                                giveResponse(resourceMethod, invocationContext, response, resourceParameters);
                            }
                        }
                        else
                        {
                            Response notFoundResponse = Response.Error(HttpStatusCode.NotFound);
                            response.OnResponse(notFoundResponse.Head, notFoundResponse.Body);
                        }
                    }
                    else
                    {
                        Response notImplementedResponse = Response.Error(HttpStatusCode.NotImplemented);
                        response.OnResponse(notImplementedResponse.Head, notImplementedResponse.Body);
                    }
                }
                else
                {
                    Response notFoundResponse = Response.Error(HttpStatusCode.NotFound);
                    response.OnResponse(notFoundResponse.Head, notFoundResponse.Body);
                }
            }
            else
            {
                Response methodNotAllowedResponse = Response.Error(HttpStatusCode.MethodNotAllowed);
                response.OnResponse(methodNotAllowedResponse.Head, methodNotAllowedResponse.Body);
            }
        }
        // POST MachineImageMessageApi
        public string Post()
        {
            var stream = new MemoryStream();

            ControllerContext.Request.Content.CopyToAsync(stream).Wait();

            stream.Seek(0, SeekOrigin.Begin);

            HttpMultipartParser.MultipartFormDataParser parser = new HttpMultipartParser.MultipartFormDataParser(stream);
            var filesList = parser.Files;

            if (filesList.Count > 0)
            {
                string uploadsDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, uploadRelativeDirectory);
                if (!Directory.Exists(uploadsDirectory))
                {
                    Directory.CreateDirectory(uploadsDirectory);
                }

                Guid   guid = Guid.NewGuid();
                string resourceIdForImage = filesList.First().FileName;
                resourceIdForImage = Path.GetFileNameWithoutExtension(resourceIdForImage) + "_" + guid.ToString() + Path.GetExtension(resourceIdForImage);
                Stream data = filesList.First().Data;

                bool ImageParsedSuccessfully = false;
                try
                {
                    data.Seek(0, SeekOrigin.Begin);
                    Image image = Image.FromStream(data);
                    image.Save(Path.Combine(uploadsDirectory, resourceIdForImage));
                    ImageParsedSuccessfully = true;

                    // Publish IMachineImageMessage here only
                    string host = System.Configuration.ConfigurationSettings.AppSettings["ChatInterfaceHost"];
                    string port = System.Configuration.ConfigurationSettings.AppSettings["ChatInterfacePort"];
                    string networkLocalHttpUri       = "http://" + host + ":" + port + "/MachineImageMessageApi/" + resourceIdForImage;
                    string deviceLocalFilePath       = Path.Combine(uploadsDirectory, resourceIdForImage);
                    MachineImageMessage imageMessage = new MachineImageMessage(resourceIdForImage, image, networkLocalHttpUri, deviceLocalFilePath);
                    hub?.Publish <IMachineImageMessage>(imageMessage);

                    // Posting the information as IMachineMessage
                    IMachineMessage message = new MachineMessage(string.Format("MachineImageMessage published: {0}, Image parsing done: {1}, PossibleAccessLink: {2}", resourceIdForImage, ImageParsedSuccessfully, networkLocalHttpUri));
                    hub?.Publish <IMachineMessage>(message);

                    Console.WriteLine("[INFO] /MachineImageMessageApi: MachineImageMessage published: {0}, Image parsing done: {1}, PossibleAccessLink: {2}", resourceIdForImage, ImageParsedSuccessfully, networkLocalHttpUri);
                }
                catch
                {
                    data.Seek(0, SeekOrigin.Begin);
                    FileStream fileStream = new FileStream(Path.Combine(uploadsDirectory, resourceIdForImage), FileMode.Create);
                    data.CopyTo(fileStream);
                    fileStream.Close();
                }

                if (hub == null)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("MachineImageMessageApiController error, hub is not available. IMachineMessage not pushed with message");
                    Console.ResetColor();
                    return("Server Api Error");
                }

                return(resourceIdForImage);
            }

            return("Acknowledged");
        }