相关疑难解决方法(0)

从multipart/form-data POST读取文件输入

我正在通过HTML表单将文件发布到WCF REST服务,enctype设置为multipart/form-data和单个组件:<input type="file" name="data">.由服务器读取的结果流包含以下内容:

------WebKitFormBoundary
Content-Disposition: form-data; name="data"; filename="DSCF0001.JPG"
Content-Type: image/jpeg

<file bytes>
------WebKitFormBoundary--
Run Code Online (Sandbox Code Playgroud)

问题是我不确定如何从流中提取文件字节.我需要这样做才能将文件写入磁盘.

c# forms wcf http-post

44
推荐指数
4
解决办法
12万
查看次数

通过表单发布上传图片

我正在尝试通过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)

c# post multipartform-data asp.net-web-api

7
推荐指数
1
解决办法
1801
查看次数

如何在 javascript 中的 FormData 中附加对象?

我们需要通过将数据附加在 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 始终接收为空值。这里如何接收客户端发送的这种格式的数据?提出你的想法。

javascript c# multipartform-data xmlhttprequest form-data

5
推荐指数
1
解决办法
5395
查看次数

将文件从Flex上传到WCF REST Stream问题(如何在REST WS中解码多部分表单帖子)

该系统是与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)

c# apache-flex rest wcf stream

4
推荐指数
2
解决办法
9015
查看次数