【问题标题】:How to save file to mapped path apicontroller asp .net mvc4如何将文件保存到映射路径 apicontroller asp .net mvc4
【发布时间】:2013-08-23 22:05:51
【问题描述】:

所以我正在处理一个项目并正在上传一个带有进度条的文件。我有进度条工作。我的文件分段进入我的控制器,我需要将它保存到服务器。这是我的 apicontroller 代码

namespace MvcMovie.Controllers.WebApi
{
public class UploadController : ApiController
{
    // Enable both Get and Post so that our jquery call can send data, and get a status
    [HttpGet]
    [HttpPost]
    public HttpResponseMessage Upload()
    {
        // Get a reference to the file that our jQuery sent.  Even with multiple files, they will all be their own request and be the 0 index
        HttpPostedFile file = HttpContext.Current.Request.Files[0];
        // do something with the file in this space 
        // {....}
        // end of file doing

        var filelenght = file.ContentLength;
        // Now we need to wire up a response so that the calling script understands what happened
        HttpContext.Current.Response.ContentType = "text/plain";
        var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        var result = new { name = file.FileName };

        HttpContext.Current.Response.Write(serializer.Serialize(result));
        HttpContext.Current.Response.StatusCode = 200;

        // For compatibility with IE's "done" event we need to return a result as well as setting the context.response
        return new HttpResponseMessage(HttpStatusCode.OK);
    }

}
}

但我不确定如何将文件保存到服务器上,因为它是分段进入的。在我做的另一个项目中,我使用了一个普通的控制器,只是使用了这个:

    [Authorize]
    [HttpPost]
    public ActionResult Index(HttpPostedFileBase file)
    {
        var username = WebSecurity.CurrentUserName;

        if (file.ContentLength > 0)
        {

            var fileName = Path.GetFileName(file.FileName);
            var path = Path.Combine(Server.MapPath("~/App_Data/uploads/" + username), fileName);
            file.SaveAs(path);
        }

        return RedirectToAction("Index");
    }

但是当我尝试在我的 apicontroller Server.MapPath 中实现该代码时不起作用。所以我想我的问题有 2 个部分,如何将上传的文件保存在 apiwebcontroller 中,以及在分段出现时如何保存?

如果你想看的话,这是我认为的 javascript:

    $(function () {
        $('#fileupload').fileupload({
            dataType: "json",
            url: "/api/upload",
            limitConcurrentUploads: 1,
            sequentialUploads: true,
            progressInterval: 100,
            maxChunkSize: 10000,
            add: function (e, data) {
                $('#filelistholder').removeClass('hide');
                data.context = $('<div />').text(data.files[0].name).appendTo('#filelistholder');
                $('</div><div class="progress"><div class="bar" style="width:0%"></div></div>').appendTo(data.context);
                $('#btnUploadAll').click(function () {
                    data.submit();
                });
            },
            done: function (e, data) {
                data.context.text(data.files[0].name + '... Completed');
                $('</div><div class="progress"><div class="bar" style="width:100%"></div></div>').appendTo(data.context);
            },
            progressall: function (e, data) {
                var progress = parseInt(data.loaded / data.total * 100, 10);
                $('#overallbar').css('width', progress + '%');
            },
            progress: function (e, data) {
                var progress = parseInt(data.loaded / data.total * 100, 10);
                data.context.find('.bar').css('width', progress + '%');
            }
        });
    });

【问题讨论】:

    标签: jquery asp.net asp.net-mvc asp.net-mvc-4 jquery-file-upload


    【解决方案1】:
            if (File.Exists(HttpContext.Current.Server.MapPath("~/App_Data/uploads/test/" + file.FileName)))
            {
                Stream input = file.InputStream;
                FileStream output = new FileStream(HttpContext.Current.Server.MapPath("~/App_Data/uploads/test/" + file.FileName), FileMode.Append);
                byte[] buffer = new byte[8 * 1024];
                int len;
                while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
                {
                    output.Write(buffer, 0, len);
                }
                input.Close();
                output.Close();
            }
            else
            {
                file.SaveAs(HttpContext.Current.Server.MapPath("~/App_Data/uploads/test/" + file.FileName));
            }
    

    所以这就是我发现最终工作的结果。当您使用 API 控制器时,能够将路径映射到您必须使用的服务器。 HttpContext.Current.Server.MapPath。然后我所要做的就是创建一个文件并将文件流附加到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      相关资源
      最近更新 更多