使用 post 从 ASP.NET web api 上传文件在发布到 Azure 但不是本地主机时抛出错误
Uploading file with post from ASP.NET web api throws error when published to Azure but not localhost
我有这个网站 api,我在其中将图像发布到我的网站 api 中的一个文件夹中,在本地执行时效果很好,但在网上发布时 api它不起作用并抛出以下错误消息 "Error writing MIME multipart body part to output stream"。我见过一些有类似问题的人,但我无法解决它,因此我将代码放在那里,希望有人能注意到可能导致此问题的原因!这是代码:
public async Task<HttpResponseMessage> Post()
{
// Check whether the POST operation is MultiPart?
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
// Prepare CustomMultipartFormDataStreamProvider in which our multipart form
// data will be loaded.
string fileSaveLocation = HttpContext.Current.Server.MapPath("~/App_Data");
CustomMultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(fileSaveLocation);
List<string> files = new List<string>();
try
{
// Read all contents of multipart message into CustomMultipartFormDataStreamProvider.
//Here the code goes down to public class CustomMultipartFormDataStreamProvider and runs that code and then jump back here. When it gets back here is when the Error is Thrown
await Request.Content.ReadAsMultipartAsync(provider);
foreach (MultipartFileData file in provider.FileData)
{
files.Add(Path.GetFileName(file.LocalFileName));
}
// Send OK Response along with saved file names to the client.
return Request.CreateResponse(HttpStatusCode.OK, files);
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
}
public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider
{
public CustomMultipartFormDataStreamProvider(string path) : base(path) { }
public override string GetLocalFileName(HttpContentHeaders headers)
{
return headers.ContentDisposition.FileName.Replace("\"", string.Empty);
}
}
代码来自 http://www.intstrings.com/ramivemula/articles/file-upload-using-multipartformdatastreamprovider-in-asp-net-webapi/,您可以在其中阅读有关代码的更多信息。非常感谢任何帮助或输入,谢谢!
我不确定您是否可以在 App_Data 中存储数据。
如果将所有文件都存储在 Blob 存储中,效果会好一千倍。如果您需要任何帮助,我会提供帮助。
关注这篇文章,你就会得到运行。
https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/
确保首次上传图像文件的虚拟目录(~/App_Data
目录如下例)实际存在。当您发布项目时,它可能不在输出文件中。
string fileSaveLocation = HttpContext.Current.Server.MapPath("~/App_Data"); CustomMultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(fileSaveLocation);
我有这个网站 api,我在其中将图像发布到我的网站 api 中的一个文件夹中,在本地执行时效果很好,但在网上发布时 api它不起作用并抛出以下错误消息 "Error writing MIME multipart body part to output stream"。我见过一些有类似问题的人,但我无法解决它,因此我将代码放在那里,希望有人能注意到可能导致此问题的原因!这是代码:
public async Task<HttpResponseMessage> Post()
{
// Check whether the POST operation is MultiPart?
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
// Prepare CustomMultipartFormDataStreamProvider in which our multipart form
// data will be loaded.
string fileSaveLocation = HttpContext.Current.Server.MapPath("~/App_Data");
CustomMultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(fileSaveLocation);
List<string> files = new List<string>();
try
{
// Read all contents of multipart message into CustomMultipartFormDataStreamProvider.
//Here the code goes down to public class CustomMultipartFormDataStreamProvider and runs that code and then jump back here. When it gets back here is when the Error is Thrown
await Request.Content.ReadAsMultipartAsync(provider);
foreach (MultipartFileData file in provider.FileData)
{
files.Add(Path.GetFileName(file.LocalFileName));
}
// Send OK Response along with saved file names to the client.
return Request.CreateResponse(HttpStatusCode.OK, files);
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
}
public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider
{
public CustomMultipartFormDataStreamProvider(string path) : base(path) { }
public override string GetLocalFileName(HttpContentHeaders headers)
{
return headers.ContentDisposition.FileName.Replace("\"", string.Empty);
}
}
代码来自 http://www.intstrings.com/ramivemula/articles/file-upload-using-multipartformdatastreamprovider-in-asp-net-webapi/,您可以在其中阅读有关代码的更多信息。非常感谢任何帮助或输入,谢谢!
我不确定您是否可以在 App_Data 中存储数据。 如果将所有文件都存储在 Blob 存储中,效果会好一千倍。如果您需要任何帮助,我会提供帮助。
关注这篇文章,你就会得到运行。
https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/
确保首次上传图像文件的虚拟目录(~/App_Data
目录如下例)实际存在。当您发布项目时,它可能不在输出文件中。
string fileSaveLocation = HttpContext.Current.Server.MapPath("~/App_Data"); CustomMultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(fileSaveLocation);