Я пытаюсь загрузить файл из 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);
});