好的,所以我正在编写一项服务,通过phonegap从iPhone应用程序接收文件上传。他们发给我一个文件,我试图获取实际文件而不将其保存到任何类型的文件系统。目前这就是我所拥有的
[HttpPost]
public string processRequest()
{
string ext = "Entered";
Request.Content.ReadAsMultipartAsync<MultipartMemoryStreamProvider>(new MultipartMemoryStreamProvider()).ContinueWith((tsk) =>
{
ext = "Request";
MultipartMemoryStreamProvider prvdr = tsk.Result;
foreach (HttpContent ctnt in prvdr.Contents)
{
ext = "Foreach";
// You would get hold of the inner memory stream here
Stream stream = ctnt.ReadAsStreamAsync().Result;
if (stream == null)
{
ext = "Null Stream";
}
Image img = Image.FromStream(stream);
if (ImageFormat.Jpeg.Equals(img.RawFormat))
{
ext = "jpeg";
}
else if (ImageFormat.Png.Equals(img.RawFormat))
{
ext = "Png";
}
else if (ImageFormat.Gif.Equals(img.RawFormat))
{
ext = "Gif";
}
// do something witht his stream now
}
});
return ext;
}
我已经在那里放了各种响应,所以我可以看到函数的位置。现在它总是返回“已输入”,这意味着它甚至没有读取请求的内容,最终游戏是我抓取文件对象,将其转换为图像然后基于64.任何方向将不胜感激。请记住,我希望在没有任何文件系统的情况下执行此操作,因此没有涉及将路径映射到服务器文件夹的解决方案。
好了这么一点更新,我根据我的第一个响应编辑了我的代码,至少它现在尝试执行,但它只是无限地陷入代码中。这发生在ReadAsMultipartAsync函数
期间[HttpPost]
public string processRequest()
{
string ext = "Entered";
Request.Content.ReadAsMultipartAsync(new MultipartMemoryStreamProvider()).ContinueWith((tsk) =>
{
ext = "Request";
MultipartMemoryStreamProvider prvdr = tsk.Result;
foreach (HttpContent ctnt in prvdr.Contents)
{
ext = "Foreach";
// You would get hold of the inner memory stream here
Stream stream = ctnt.ReadAsStreamAsync().Result;
if (stream == null)
{
ext = "Null Stream";
}
Image img = Image.FromStream(stream);
if (ImageFormat.Jpeg.Equals(img.RawFormat))
{
ext = "jpeg";
}
else if (ImageFormat.Png.Equals(img.RawFormat))
{
ext = "Png";
}
else if (ImageFormat.Gif.Equals(img.RawFormat))
{
ext = "Gif";
}
// do something witht his stream now
}
}).Wait();
return ext;
}
答案 0 :(得分:1)
ContinueWith
内的块也异步运行(如果你查看ContinueWith的签名,你会看到它也返回Task
)。因此,使用上面的代码,基本上你可以在任何有机会执行之前返回。
尝试做:
Request.Content.ReadAsMultipartAsync().ContinueWith(...).Wait();
另外,不确定你是否需要去做Request.Content.ReadAsMultipartAsync<MultipartMemoryStreamProvider>(new MultipartMemoryStreamProvider())
的麻烦;我相信Request.Content.ReadAsMultipartAsync()
应该足够了。
希望有所帮助!