ASP.NET Web API 2 文件上传

14

我想知道如何在不使用MVC组件的情况下,最好地处理文件上传以及添加到要上传的文件中的附加信息,使用ASP.NET Web API 2。 我已经在网上搜索了一些资料,但结果比我预期的更加困惑。

附加信息将存储在数据库中,而文件将存储在磁盘上。 到目前为止,我正在构建的Web API应用程序不支持multipart / form-data。 它仅支持默认媒体类型。 我知道我需要创建一个媒体格式化程序。

请帮忙。


6
请查看 ASP.NET 网站上的此链接:发送 HTML 表单数据:文件上传和多部分 MIME - Jon Susiak
你不能只上传文件并在查询字符串中发送额外的数据吗?我知道这很丑陋,但如果应用程序不支持multipart/form-data,那可能就是你得到的东西。 - jao
这里是如何在MVC中处理此问题的链接,您可能会发现一些有用的内容http://www.prideparrot.com/blog/archive/2012/8/uploading_and_returning_files - Andrey Ischencko
2个回答

1
我已经编写了JavaScript拆分文件并上传到WEB API的代码。我认为您可以参考我的后端代码。
在前端,您需要使用以下代码来上传您的文件。
  var xhr = new self.XMLHttpRequest();
  xhr.open('POST', url, false);
  xhr.setRequestHeader('Content-Type', 'application/octet-stream');
  xhr.send(chunk);

在后端使用Request.InputStream.Read来获取文件字节。
    [HttpPost]
    [ValidateInput(false)]
    public string fileUpload(string filename)
    {
        byte[] file = new byte[Request.InputStream.Length];
        Request.InputStream.Read(file, 0, Convert.ToInt32(Request.InputStream.Length));
        BinaryWriter binWriter = new BinaryWriter(new MemoryStream());
        binWriter.Write(file);
        StreamReader reader = new StreamReader(binWriter.BaseStream);
        reader.BaseStream.Position = 0;
        //This example is recevied text file
        while ((line = reader.ReadLine()) != null)
        {

         };
    }

0

如果由于某些原因无法使用multipart/from-data,您可以将文件数据序列化为BASE64并将其作为字符串发送。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接