应用程序在将请求发送到服务器

时间:2016-05-03 20:46:25

标签: c# android file-upload asp.net-web-api xamarin

我正在使用Xamarin构建一个Android应用程序,它与ASP.net服务器的API通信。我正在尝试使用以下代码行将文件上传到服务器:

        public async Task<HttpResponseMessage> UploadFile(byte[] file)
    {
        var progress = new System.Net.Http.Handlers.ProgressMessageHandler();

        //progress.HttpSendProgress += progress_HttpSendProgress;

        using (var client = HttpClientFactory.Create(progress))
        {
            client.BaseAddress = new Uri(GlobalVariables.host);

            // Set the Accept header for BSON.
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(
                    new MediaTypeWithQualityHeaderValue("application/bson"));

            var request = new uploadFileModel { data = file, dateCreated = DateTime.Now, fileName = "myvideooo.mp4", username = "psyoptica" };

            // POST using the BSON formatter.
            MediaTypeFormatter bsonFormatter = new BsonMediaTypeFormatter();
            var m = client.MaxResponseContentBufferSize;
            var result = await client.PostAsync("api/media/upload", request, bsonFormatter);
            return result.EnsureSuccessStatusCode();
        }
    }

应用程序在服务器收到请求之前崩溃。我正在尝试上传的文件可能是视频或音频文件。应用程序崩溃后,服务器会收到请求。这在本地服务器上运行良好,但崩溃发生在实时服务器上。我的服务器端代码如下所示:

 [HttpPost]
    [Route("upload")]
    public async Task<HttpResponseMessage> Upload(uploadFileModel model)
    {


        var result = new HttpResponseMessage(HttpStatusCode.OK);

        if (ModelState.IsValid)
        {
            string thumbname = "";
            string resizedthumbname = Guid.NewGuid() + "_yt.jpg";

            string FfmpegPath = Encoding_Settings.FFMPEGPATH;

            string tempFilePath = Path.Combine(HttpContext.Current.Server.MapPath("~/tempuploads"), model.fileName);
            string pathToFiles = HttpContext.Current.Server.MapPath("~/tempuploads");
            string pathToThumbs = HttpContext.Current.Server.MapPath("~/contents/member/" + model.username + "/thumbs");
            string finalPath = HttpContext.Current.Server.MapPath("~/contents/member/" + model.username + "/flv");
            string resizedthumb = Path.Combine(pathToThumbs, resizedthumbname);


            var outputPathVid = new MediaFile { Filename = Path.Combine(finalPath, model.fileName) };
            var inputPathVid = new MediaFile { Filename = Path.Combine(pathToFiles, model.fileName) };
            int maxWidth = 380;
            int maxHeight = 360;

            var namewithoutext = Path.GetFileNameWithoutExtension(Path.Combine(pathToFiles, model.fileName));
            thumbname = model.VideoThumbName;
            string oldthumbpath = Path.Combine(pathToThumbs, thumbname);


            var fileName = model.fileName;

            File.WriteAllBytes(tempFilePath, model.data);


            if (model.fileName.Contains("audio"))
            {
                File.WriteAllBytes(Path.Combine(finalPath, model.fileName), model.data);

                string audio_thumb = "mic_thumb.jpg";
                string destination = Path.Combine(pathToThumbs, audio_thumb);
                string source = Path.Combine(pathToFiles, audio_thumb);
                if (!System.IO.File.Exists(destination))
                {
                    System.IO.File.Copy(source, destination, true);
                }


                Video_Struct vd = new Video_Struct();
                vd.CategoryID = 0; // store categoryname or term instead of category id
                vd.Categories = "";
                vd.UserName = model.username;
                vd.Title = "";
                vd.Description = "";
                vd.Tags = "";
                vd.OriginalVideoFileName = model.fileName;
                vd.VideoFileName = model.fileName;
                vd.ThumbFileName = "mic_thumb.jpg";
                vd.isPrivate = 0;
                vd.AuthKey = "";
                vd.isEnabled = 1;
                vd.Response_VideoID = 0; // video responses
                vd.isResponse = 0;
                vd.isPublished = 1;
                vd.isReviewed = 1;
                vd.Thumb_Url = "none";
                //vd.FLV_Url = flv_url;
                vd.Embed_Script = "";
                vd.isExternal = 0; // website own video, 1: embed video
                vd.Type = 0;
                vd.YoutubeID = "";
                vd.isTagsreViewed = 1;
                vd.Mode = 0; // filter videos based on website sections
                long videoid = VideoBLL.Process_Info(vd, false);
            }
            else
            {
                using (var engine = new Engine())
                {
                    engine.GetMetadata(inputPathVid);

                    // Saves the frame located on the 15th second of the video.
                    var outputPathThumb = new MediaFile { Filename = Path.Combine(pathToThumbs, thumbname+".jpg") };
                    var options = new ConversionOptions { Seek = TimeSpan.FromSeconds(0), CustomHeight = 360, CustomWidth = 380 };
                    engine.GetThumbnail(inputPathVid, outputPathThumb, options);

                }

                Image image = Image.FromFile(Path.Combine(pathToThumbs, thumbname+".jpg"));

                //var ratioX = (double)maxWidth / image.Width;
                //var ratioY = (double)maxHeight / image.Height;
                //var ratio = Math.Min(ratioX, ratioY);

                var newWidth = (int)(maxWidth);
                var newHeight = (int)(maxHeight);

                var newImage = new Bitmap(newWidth, newHeight);
                Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, newHeight);
                Bitmap bmp = new Bitmap(newImage);
                bmp.Save(Path.Combine(pathToThumbs, thumbname+"_resized.jpg"));

                //File.Delete(Path.Combine(pathToThumbs, thumbname));

                using (var engine = new Engine())
                {

                    var conversionOptions = new ConversionOptions
                    {
                        VideoSize = VideoSize.Hd720,
                        AudioSampleRate = AudioSampleRate.Hz44100,
                        VideoAspectRatio = VideoAspectRatio.Default
                    };

                    engine.GetMetadata(inputPathVid);
                    engine.Convert(inputPathVid, outputPathVid, conversionOptions);

                }

                File.Delete(tempFilePath);

                Video_Struct vd = new Video_Struct();
                vd.CategoryID = 0; // store categoryname or term instead of category id
                vd.Categories = "";
                vd.UserName = model.username;
                vd.Title = "";
                vd.Description = "";
                vd.Tags = "";
                vd.Duration = inputPathVid.Metadata.Duration.ToString();
                vd.Duration_Sec = Convert.ToInt32(inputPathVid.Metadata.Duration.Seconds.ToString());
                vd.OriginalVideoFileName = model.fileName;
                vd.VideoFileName = model.fileName;
                vd.ThumbFileName = thumbname+"_resized.jpg";
                vd.isPrivate = 0;
                vd.AuthKey = "";
                vd.isEnabled = 1;
                vd.Response_VideoID = 0; // video responses
                vd.isResponse = 0;
                vd.isPublished = 1;
                vd.isReviewed = 1;
                vd.Thumb_Url = "none";
                //vd.FLV_Url = flv_url;
                vd.Embed_Script = "";
                vd.isExternal = 0; // website own video, 1: embed video
                vd.Type = 0;
                vd.YoutubeID = "";
                vd.isTagsreViewed = 1;
                vd.Mode = 0; // filter videos based on website sections
                //vd.ContentLength = f_contentlength;
                vd.GalleryID = 0;
                long videoid = VideoBLL.Process_Info(vd, false);

            }




            return result;
        }

        else
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"));
        }

    }`

我在这里做错了什么让应用程序崩溃。有一个更好的方法吗? 任何帮助表示赞赏。

0 个答案:

没有答案