Android到WCF:流式多部分图像和Json字符串

时间:2015-07-22 13:52:51

标签: android json wcf multipartentity

Android到WCF:流式多部分图像和Json字符串

我想创建一个WCF-RESTful Web服务方法,我需要上传图像(多部分表单数据)以及其他一些信息(采用JSON格式)。这个Web服务将被android和iPhone应用程序访问,以发送Image和json信息

我想要WCF服务器端和Android代码,帮帮我

我尝试将图片和文字上传到wcf服务。我创建了一个保存上传图像的服务:

休息客户代码

protected void Button2_Click(object sender, EventArgs e)
        {
            if (FileUpload1.HasFile)
            {

                MemoryStream mStream = new MemoryStream();

                Bitmap bmpPostedImage = new Bitmap(FileUpload1.PostedFile.InputStream);

                bmpPostedImage.Save(mStream, System.Drawing.Imaging.ImageFormat.Jpeg);                
                byte[] imageArray = mStream.ToArray();
                mStream.Close();

                VehicleCheckListTransaction objAttachmentRequestDto = new VehicleCheckListTransaction();
                objAttachmentRequestDto.VehicleCheckListTransactionID = 0;
                objAttachmentRequestDto.VehicleCheckListID = 2;
                objAttachmentRequestDto.TTID = 10;
                objAttachmentRequestDto.UserID = 226;
                objAttachmentRequestDto.UserTypeID = 4;
                objAttachmentRequestDto.ValidTill = "215-05-10";
                objAttachmentRequestDto.CurrentDate = "215-07-22";
                objAttachmentRequestDto.CurrentStatus = "Yes";
                objAttachmentRequestDto.CreatedBy= 226;
                objAttachmentRequestDto.ModifiedBy = 226;
                objAttachmentRequestDto.CreatedDate = string.Empty;
                objAttachmentRequestDto.ModifiedDate = string.Empty;
                objAttachmentRequestDto.Notes = "Some Text";
                objAttachmentRequestDto.IsActive = true;
                objAttachmentRequestDto.FileName = "";
                objAttachmentRequestDto.FilePath = "";
                objAttachmentRequestDto.VerifiedBy = 226;

                var serializer = new DataContractJsonSerializer(typeof(VehicleCheckListTransaction));
                var ms = new MemoryStream();
                serializer.WriteObject(ms, objAttachmentRequestDto);
                ms.Position = 0;
                var reader = new StreamReader(ms);
                string requestBody = reader.ReadToEnd();

                var client = new RestClient();
                client.BaseUrl = new Uri("http://localhost:49188/WDS_SERVICE.svc/");
                var request = new RestRequest(Method.POST) { DateFormat = DataFormat.Json.ToString(), Resource = "vehiclechecklisttransaction/Add" };
                if (requestBody != null)
                    request.AddParameter("VehicleCheckListTransaction", requestBody);
                request.AddFile("file1", imageArray, "NEVER.jpg");
                var response = client.Execute(request);
            }
        }

WCF服务代码

public string UploadPhoto(Stream request)
        {
            //Read in our Stream into a string...
            StreamReader reader = new StreamReader(request);
            string JSONdata = reader.ReadToEnd();

            // ..then convert the string into a single "wsCustomer" record.
            JavaScriptSerializer jss = new JavaScriptSerializer();
            Checklist Checklist = jss.Deserialize<Checklist>(JSONdata);

            try
            {
                FileStream targetStream = null;
                Stream sourceStream = Checklist.fileContents;

                String guid = Guid.NewGuid().ToString();

                //get photofolder path
                string photofolderName = "Trip\\Android";
                string filename = guid + ".JPEG";
                string uriPath = "file:\\C:\\inetpub\\wwwroot\\WDS\\Media\\" + photofolderName + "\\" + filename;
                string photopath = new Uri(uriPath).LocalPath;

                using (targetStream = new FileStream(photopath, FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    //read from the input stream in 6K chunks
                    //and save to output stream
                    const int bufferLen = 65000;
                    byte[] buffer = new byte[bufferLen];
                    int count = 0;
                    while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0)
                    {
                        targetStream.Write(buffer, 0, count);
                    }
                    targetStream.Close();
                    sourceStream.Close();
                }

                db.Checklists.Add(Checklist);
                db.SaveChanges();
                return filename + "_" + Checklist.ChecklistID;
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }

0 个答案:

没有答案