Попытка загрузить файл из JavaScript в веб-сервис WCF - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь загрузить файл из ionic в веб-службу WCF во внешней службе.

Мне кажется, я достаточно хорошо знаю TypeScript, но я новичок в передаче файлов в ASP.NET. Я пробовал несколько решений, ни одно из которых не работает. Я не уверен, какое решение выбрать, поэтому подумал, что спросить здесь.

Ниже приведен мой ионный код.

doImageUpload() {
  let loader = this.loadingCtrl.create({
    content: "Uploading..."
  });
  loader.present();

  let filename = this.imageURI.replace(/^file:\/\//, '');

  //let filename = this.imageURI.split('/').pop();

  //filename = filename.replace(/^file:\/\//, '');

   console.log('imageURI', filename);
  console.log('imageURIoriginal', this.imageURI);
  const fileTransfer: FileTransferObject = this.transfer.create();

  let options: FileUploadOptions = {
    fileKey: "file",
    fileName: filename,
    chunkedMode: false,
    mimeType: "image/jpg",
    params: { 'title': this.imageTitle }
  };
fileTransfer.upload(filename,"http://172.16.8.110:58482/TweetService.svc/uploadImage",options).then((res)=>{
    console.log('success', res);

  },(err)=>{
    console.log('fail', err);
  });

}

Веб-служба, которую я извлек из Интернета, выглядит следующим образом.

    [OperationContract]
    [HttpPost]
    [Route("upload")]
    public HttpResponseMessage uploadImage()
    {
        var request = HttpContext.Current.Request;

        if (Request.Content.IsMimeMultipartContent())
        {
            if (request.Files.Count > 0)
            {
                var postedFile = request.Files.Get("file");
                var title = request.Params["title"];
                string root = HttpContext.Current.Server.MapPath("~/Files");
                root = root + "/" + postedFile.FileName;
                postedFile.SaveAs(root);
            //Save post to DB
            return Request.CreateResponse(System.Net.HttpStatusCode.Found, new
            {
                error = false,
                status = "created",
                path = root
            });
            return null;

            }
        }

        return null;
    }

Непосредственная ошибка, которая выдается, состоит в том, что "Запрос не может быть найден". Я не знаю, должен ли это быть «запрос», но в любом случае это все равно не будет работать, так как «контент» не является членом HTTPContext.

Кто-нибудь знает лучший способ подойти к этому?

EDIT:

Очевидно, что в WCF 4.5 он запускает «буферный поток» до запуска любого метода, поэтому не работает в «классическом» режиме. Я добавил код, чтобы справиться с этим.

Я сократил свой код, и теперь метод больше не получает и выдает ошибку, но теперь я получаю 500 ошибок, указывающих на то, что что-то не так с параметрами или способом их передачи. Это ошибка, которую я получаю .

Сообщение об ошибке

Это обновленный метод C #.

[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest, Method = 
"POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = 
WebMessageFormat.Json)]
public string SaveImage()
{
    HttpPostedFile file = HttpContext.Current.Request.Files["recFile"];
    return "somestring";
}

Это ионный код.

const fileTransfer: FileTransferObject = this.transfer.create();

let options: FileUploadOptions = {
    fileKey: "recFile",
    fileName: this.imageURI,
    chunkedMode: false,
    mimeType: "image/jpg",
    params: { 'title': this.imageTitle }
};

fileTransfer.upload(this.imageURI, "http://172.16.8.110:58482/TweetService.svc/uploadImage",options).then((res)=> 
 {
  console.log('success', res);

},(err)=>{
  console.log('fail', err);
});
...