在 web Api 项目中获取上传文件的字节数组
Get the byte array of uploaded file on web Api project
我正在开发一个 Android 应用程序,该应用程序与 WebApi .NET 项目通信,以便从数据库中插入和获取日期,常见情况。
我试过使用多部分 MIME。所以我使用了以下代码:
public async Task<HttpResponseMessage> ManageProfilePicture()
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
var task = await Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
}
String fileName = provider.FileData[0].Headers.ContentDisposition.FileName;
return Request.CreateResponse(HttpStatusCode.OK);
});
return task;
}
我可以得到上传文件的文件名和其他信息。我如何获取与上传文件关联的字节数组以便将其保存在 MS SQL Server 中?也许在可访问的文件夹中重新创建图片比将其存储在数据库中更好...
有人可以帮我吗?
您的需求可以参考下面的示例代码:
// process incoming request
if (!Request.Content.IsMimeMultipartContent())
{
// return error response
}
// read the file and form data.
...
await Request.Content.ReadAsMultipartAsync(provider);
...
// check if files are on the request.
if (provider.FileStreams.Count == 0)
{
// return return error response
}
IList<string> uploadedFiles = new List<string>();
foreach (KeyValuePair<string, Stream> file in provider.FileStreams)
{
// get file name and file stream
byte[] photo;
string fileName = file.Key;
using (Stream stream = file.Value)
{
using (BinaryReader reader = new BinaryReader(stream))
{
photo = reader.ReadBytes((int)stream.Length);
}
}
// INSERT INTO DATABASE HERE (USING SqlConnection, SqlCommand...)
// ...
// keep track of the filename and filelength for the response
uploadedFiles.Add(fileName);
uploadedFiles.Add(photo.Length.ToString("N0") + " bytes");
}
// return successful response;
希望对您有所帮助!
P/S:您可以阅读更多here。
我正在开发一个 Android 应用程序,该应用程序与 WebApi .NET 项目通信,以便从数据库中插入和获取日期,常见情况。 我试过使用多部分 MIME。所以我使用了以下代码:
public async Task<HttpResponseMessage> ManageProfilePicture()
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
var task = await Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
}
String fileName = provider.FileData[0].Headers.ContentDisposition.FileName;
return Request.CreateResponse(HttpStatusCode.OK);
});
return task;
}
我可以得到上传文件的文件名和其他信息。我如何获取与上传文件关联的字节数组以便将其保存在 MS SQL Server 中?也许在可访问的文件夹中重新创建图片比将其存储在数据库中更好...
有人可以帮我吗?
您的需求可以参考下面的示例代码:
// process incoming request
if (!Request.Content.IsMimeMultipartContent())
{
// return error response
}
// read the file and form data.
...
await Request.Content.ReadAsMultipartAsync(provider);
...
// check if files are on the request.
if (provider.FileStreams.Count == 0)
{
// return return error response
}
IList<string> uploadedFiles = new List<string>();
foreach (KeyValuePair<string, Stream> file in provider.FileStreams)
{
// get file name and file stream
byte[] photo;
string fileName = file.Key;
using (Stream stream = file.Value)
{
using (BinaryReader reader = new BinaryReader(stream))
{
photo = reader.ReadBytes((int)stream.Length);
}
}
// INSERT INTO DATABASE HERE (USING SqlConnection, SqlCommand...)
// ...
// keep track of the filename and filelength for the response
uploadedFiles.Add(fileName);
uploadedFiles.Add(photo.Length.ToString("N0") + " bytes");
}
// return successful response;
希望对您有所帮助!
P/S:您可以阅读更多here。