有没有人知道,或者更好的是有一个WCF服务的例子,它将接受表格后期编码multipart/form-data即.从网页上传文件?
我在谷歌上空了.
塔,蚂蚁
我只是想编写一个多部分解析器,但事情变得复杂,并想知道是否有人知道C#中的现成解析器!
为了说清楚,我正在编写自己的"小"http服务器,并且需要解析多部分表单数据!
在此先感谢Gohlool
得到了一个.NET/C#问题......
我需要解析一些"multipart/form-data"格式的输入发布数据,以提取传递的用户名和密码.任何人都知道如何在不编写自己的解析代码的情况下执行此操作
请注意输入的帖子数据如下所示:
---------1075d313df8d4e1d
Content-Disposition: form-data; name="username"
x@y.com
---------1075d313df8d4e1d
Content-Disposition: form-data; name="password"
somepassword
---------1075d313df8d4e1d--
Run Code Online (Sandbox Code Playgroud)
为了展示我的代码,目前看起来像这样:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "Login", BodyStyle = WebMessageBodyStyle.Bare)]
public Stream Login(Stream input)
{
string username = String.Empty;
string password = String.Empty;
StreamReader sr = new StreamReader(input);
string strInput = sr.ReadToEnd();
sr.Dispose();
// Help needed here:
usermame = ?.Parse(strINput, "username");
password = ?.Parse(strINput, "password");
// blah blah blah return login XML response as a Stream
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过multipart/form-data帖子上传图片,我正在使用下面的代码.我只会上传.jpg图片.
问题是保存的图像不是有效图像,无法查看.它也比我上传的文件大200个字节,所以我想我在这里遗漏了什么?
public class FileUploadController : ApiController
{
public Task<HttpResponseMessage> PostUploadFile()
{
return UploadFileAsync().ContinueWith<HttpResponseMessage>((tsk) =>
{
HttpResponseMessage response = null;
if (tsk.IsCompleted)
{
response = new HttpResponseMessage(HttpStatusCode.Created);
}
else if (tsk.IsFaulted || tsk.IsCanceled)
{
response =
new HttpResponseMessage(HttpStatusCode.InternalServerError);
}
return response;
});
}
public Task UploadFileAsync()
{
return this.Request.Content.ReadAsStreamAsync().ContinueWith((tsk) =>
{ SaveToFile(tsk.Result); },
TaskContinuationOptions.OnlyOnRanToCompletion);
}
private void SaveToFile(Stream requestStream)
{
string path =
System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory);
using (FileStream targetStream =
File.Create(path + "/Uploads/" + DateTime.Now.ToFileTime() + ".jpg"))
{ …Run Code Online (Sandbox Code Playgroud) 我们需要通过将数据附加在 javascript 中的 formdata 中来将数据发送到服务器。在 javascript 中,我们像下面这样处理这个。
var ajax = new XMLHttpRequest();
ajax.open("POST", url, true);
var formData = new FormData();
var obj = {url: "uploadUrl",type: 'POST', mode: true};
formData.append('myData', JSON.stringify(obj));
ajax.send(formData);
Run Code Online (Sandbox Code Playgroud)
在服务器端,我们有如下方法。
public void Save(MyModel args) {
....
}
public class MyModel
{
public MyObj myData { get; set; }
}
public class MyObj
{
public string url { get; set; }
public string type { get; set; }
public bool mode { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
args.myData 始终接收为空值。这里如何接收客户端发送的这种格式的数据?提出你的想法。
该系统是与WCF REST Web服务通信的Flex应用程序.我正在尝试将文件从Flex应用程序上传到服务器并遇到一些问题,我希望有人可以帮忙.我在Flex应用程序中使用FileReference来浏览和上传此处定义的文件:
http://blog.flexexamples.com/2007/09/21/uploading-files-in-flex-using-the-filereference-class/
然后,我在WCF REST Web服务中使用流(在调试器中显示为System.ServiceModel.Dispatcher.StreamFormatter.MessageBodyStream)接收文件(使用WCF 4 REST服务的项目类型)
[WebInvoke(Method = "POST", UriTemplate = "_test/upload")]
public void UploadImage(Stream data)
{
// TODO: just hardcode filename for now
var filepath = HttpContext.Current.Server.MapPath(@"~\_test\testfile.txt");
using (Stream file = File.OpenWrite(filepath))
{
CopyStream(data, file);
}
}
private static void CopyStream(Stream input, Stream output)
{
var buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:此帖子中使用的CopyStream方法:如何将流保存到C#中的文件?
该文件保存没有任何问题.我遇到的问题是该文件包含的信息比我想要的多.以下是保存文件的内容(源文件仅包含"这是文件的内容"):
------------ae0ae0Ef1ae0Ef1ae0gL6gL6Ij5cH2
Content-Disposition: form-data; name="Filename"
testfile.txt …Run Code Online (Sandbox Code Playgroud)