我目前正在使用 web 开发一个REST Web服务。我遇到了处理二进制数据(一幅图像)的问题,它是通过POST请求发送的。
从客户端的角度来看,我已经成功地使用jQuery表单插件发送了二进制数据。但是因为我对.NET非常陌生(我是一个PHP ),所以我很难通过服务器上的Web处理这些二进制数据。
为了确认jQuery表单插件是否正确地发送图像数据,我编写了一个PHP处理程序,该处理程序使用了简单的$_FILE全局变量。
现在,我正试图通过Web实现同样的目标。这是我尝试过的东西的概要。如何访问已发送的二进制数据?
模型:
namespace EDHDelivery.Models
{
public class Oferta
{
public int OfertaID { get; set; }
public string Nombre { get; set; }
public string Imagen { get; set; }
public int ComercioID { get; set; }
}
}控制器(显示部分代码):
public Oferta Add(Oferta item)
{
/*here my item will have the POST body with form values,
automatically serialized by the framework and I think an image binary*/
var n = item.Nombre; //...etc.
}发布于 2013-02-07 01:36:41
简而言之,您必须以multipart/form-data的形式发送数据(我非常肯定,您已经通过您提到的插件进行了发送),然后您必须使用Web MultipartContent提供者之一提取该数据。
有大量的资源解释了如何做到这一点:
发布于 2016-09-29 12:57:14
我所取得的同样的成就
这是我的上传用户类
public class UploadUserFile
{
string _Token;
string _UserId;
string _IPAddress;
string _DeviceInfo;
string _FileName;
string _ContentType;
Stream _PhotoStream;
public string Token
{
get
{
return _Token;
}
set
{
_Token = value;
}
}
public string UserId
{
get
{
return _UserId;
}
set
{
_UserId = value;
}
}
public string IPAddress
{
get
{
return _IPAddress;
}
set
{
_IPAddress = value;
}
}
public string DeviceInfo
{
get
{
return _DeviceInfo;
}
set
{
_DeviceInfo = value;
}
}
public string FileName
{
get
{
return _FileName;
}
set
{
_FileName = value;
}
}
public string ContentType
{
get
{
return _ContentType;
}
set
{
_ContentType = value;
}
}
public Stream PhotoStream
{
get
{
return _PhotoStream;
}
set
{
PhotoStream = value;
}
}
}这是我的API控制器类
public class UploadUserPhotoController : ApiController
{
/// <summary>
/// </summary>
/// <param name="request">
/// HttpRequestMessage, on the other hand, is new in .NET 4.5.
/// It is part of System.Net.
/// It can be used both by clients and services to create, send and receive requests and
/// responses over HTTP.
/// It replaces HttpWebRequest, which is obsolete in .NET 4.5
/// </param>
/// <returns>return the response of the Page <returns>
[HttpPost]
public async Task<HttpResponseMessage> Post(HttpRequestMessage request)
{
var httpRequest = HttpContext.Current.Request;
var UploadUserFileObj = new UploadUserFile
{
Token = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "Token").FirstOrDefault().Value.ToString(),
UserId = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "UserId").FirstOrDefault().Value.ToString(),
IPAddress = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "IPAddress").FirstOrDefault().Value.ToString(),
ContentType = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "ContentType").FirstOrDefault().Value.ToString(),
DeviceInfo = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "DeviceInfo").FirstOrDefault().Value.ToString(),
FileName = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "FileName").FirstOrDefault().Value.ToString()
};
Stream requestStream = await request.Content.ReadAsStreamAsync();
HttpResponseMessage result = null;
if (requestStream!=null)
{
try
{
if(string.IsNullOrEmpty(UploadUserFileObj.FileName))
{
UploadUserFileObj.FileName = "DefaultName.jpg";
}
// Create a FileStream object to write a stream to a file
using (FileStream fileStream = System.IO.File.Create(HttpContext.Current.Server.MapPath("~/locker/" + UploadUserFileObj.FileName), (int)requestStream.Length))
{
// Fill the bytes[] array with the stream data
byte[] bytesInStream = new byte[requestStream.Length];
requestStream.Read(bytesInStream, 0, (int)bytesInStream.Length);
// Use FileStream object to write to the specified file
fileStream.Write(bytesInStream, 0, bytesInStream.Length);
result = Request.CreateResponse(HttpStatusCode.Created, UploadUserFileObj.FileName);
}
}
catch (HttpException ex)
{
return result = Request.CreateResponse(HttpStatusCode.BadGateway,"Http Exception Come"+ ex.Message);
}
catch(Exception ex)
{
return result = Request.CreateResponse(HttpStatusCode.BadGateway, "Http Exception Come" + ex.Message);
}
}
else
{
return result = Request.CreateResponse(HttpStatusCode.BadGateway, "Not eble to upload the File ");
}
return result;
}
}在这段代码中,我使用了
HttpRequestMessage,用于在clinet到服务器服务器到客户端之间传输数据。
https://stackoverflow.com/questions/14740929
复制相似问题