标签: httppostedfilebase

如何将httppostedfilebase转换为String数组

    public ActionResult Import(HttpPostedFileBase currencyConversionsFile)
    {

        string filename = "CurrencyConversion Upload_" + DateTime.Now.ToString("dd-MM-yyyy") + ".csv";
        string folderPath = Server.MapPath("~/Files/");

        string filePath = Server.MapPath("~/Files/" + filename);
        currencyConversionsFile.SaveAs(filePath);
        string[] csvData = System.IO.File.ReadAllLines(filePath);

        //the later code isn't show here
        }
Run Code Online (Sandbox Code Playgroud)

我知道将httppostedfilebase转换为String数组的常用方法,它首先将文件存储在服务器中,然后从服务器读取数据.无论如何直接从httppostedfilebase获取字符串数组而不将文件存储到服务器中?

asp.net-mvc httppostedfilebase

8
推荐指数
2
解决办法
8510
查看次数

无法将HttpPostedFileBase保存到会话变量并使用两次

早上好 - 我试图将HttpPostedFileBase(它总是一个简单的CSV文件)保存到会话变量,如下所示:

    [HttpPost]
    public ActionResult Index(HttpPostedFileBase importFile) {
        Session.Remove("NoteImport");
        var noteImport = new NoteImport { ImportFile = importFile, HeaderList = NoteService.HeaderList(importFile) };
        Session["NoteImport"] = noteImport;
        return RedirectToAction("FileNote");

    }
Run Code Online (Sandbox Code Playgroud)

如您所见,我将importFile转储到我的NoteImport类中.目前,ImportFile属性是可公开访问的HttpPostedFileBase类型.

我第一次在我的服务中使用此属性(创建标题值列表的方法),我没有问题:

    public List<string> HeaderList(HttpPostedFileBase fileStream) {
        var sr = new StreamReader(fileStream.InputStream);
        var headerString = sr.ReadLine();
        var headerArray = headerString.Split(',');
        var headerList = new List<string>();
        foreach (var header in headerArray) {
            if (!ValidateHeader(header))
                throw new InvalidDataException("Invalid header name: " + header);
            headerList.Add(header);
        }
        return headerList;
    }
Run Code Online (Sandbox Code Playgroud)

以上工作正常,并返回我目前所需要的.

我的问题是下面的代码.当我调用ReadLine()时,它不会从HttpPostedFileBase中获取任何内容.

    public List<string> ImportFileStream(HttpPostedFileBase …
Run Code Online (Sandbox Code Playgroud)

c# inputstream httppostedfilebase asp.net-mvc-2

6
推荐指数
1
解决办法
5859
查看次数

返回HttpPostedFileBase以查看验证错误

当我尝试将图像上传到我的MVC控制器操作并且存在验证错误时,我必须单击每个按钮并再次查找我的所有文件.

如果我有一个包含的视图

<input type="file" id="file0" name="Files[0]" />
<input type="file" id="file1" name="Files[1]" />
Run Code Online (Sandbox Code Playgroud)

和控制器动作一样

public ActionResult Create(ModelClass model, IEnumerable<HttpPostedFileBase> Files)
{
    if(ModelState.IsValid)
    {
        //do work
        if(PhotoValidation.IsValid(Files))
        {
            //do work
        }
        else 
        {
            ModelState.AddModelError("","Photos not valid");
        }
    }
    return view(model); // Way to return photos back to the view on modelstate error?
}
Run Code Online (Sandbox Code Playgroud)

文件很好地发布到服务器,但是如果有模型验证错误,有没有办法返回模型和文件,以便用户不必再次上传它们?

asp.net-mvc modelstate httppostedfilebase

6
推荐指数
1
解决办法
2773
查看次数

对于基本视图模型属性,HttpPostedFileBase在POST上为0字节

我在视图模型上正确地发布了图像并绑定到HttpPostedFileBase属性,但是当我在视图模型的基类中放置相同的属性时,它不会对绑定字节进行建模.它仍然显示图像名称,但不显示内容流.

我测试了我能想到的一切.请帮忙!

这些图片讲述了整个故事: 在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

提前致谢.如果有什么不清楚,请告诉我.

UPDATE

我认为这是一个合法的错误.在发布SO之前,我尝试了以下所有建议(截至1/26).我还尝试过:1.将基本属性创建为虚拟并在子类中重写它2.在子类中创建一个新属性,仅获取/设置基本属性

我的解决方案远非优雅,是在子类上添加"临时"属性,而MVC操作方法中的第一件事就是将基本属性设置为它.我希望有一个真正的解决方案,我可以恢复这个修道院并做正确的修复.

c# asp.net-mvc httppostedfilebase

6
推荐指数
1
解决办法
416
查看次数

为什么HttpPostedFile不像广告和缓冲区下载到磁盘而不是内存?

我使用标准HTML <input>控件发布多部分表单数据将大文件上载到ASP.NET服务器.这是一个ASP.NET MVC应用程序.

根据MSDN,HttpPostedFile该类缓冲到磁盘开箱即用:

"文件以MIME multipart/form-data格式上传.默认情况下,大于256 KB的所有请求(包括表单字段和上传文件)都缓冲到磁盘,而不是保存在服务器内存中."

我想这意味着,当我访问HttpPostedFileBase我的控制器,当我访问HttpPostedFileBaseInputStream财产,我可以写某个文件缓冲区,而不必担心运行内存的服务器,这显然是一个不可行的解决方案.

这里有一些关于我如何处理每个传入文件的伪代码HttpPostedFileBase.

for(var i = 0; i< Request.Files.Count;i++)
{
    var fileBase = Request.Files[i];
    if (fileBase.ContentLength == 0)
    {
        continue;
    }

    // One thread per file
    ThreadPool.QueueUserWorkItem(state =>
    {
        // Read from fileBase.InputStream
    }, 
    null);
}
Run Code Online (Sandbox Code Playgroud)

我的web.config的httpRuntime块如下所示:

<httpRuntime
  executionTimeout="1200"
  requestLengthDiskThreshold="2097151"
  maxRequestLength="2097151"
  useFullyQualifiedRedirectUrl="false"
  minFreeThreads="8"
  minLocalRequestFreeThreads="4"
  appRequestQueueLimit="100" />
Run Code Online (Sandbox Code Playgroud)

我的实现工作,多个文件按预期上传,除了服务器消耗缓冲整个有效负载所需的相同内存量.我必须假设InputStream正在缓冲所有内容.当我上传的文件多于我的内存时,它可以预测会崩溃OutOfMemoryException.这是上传800mb文件时内存峰值的图像.

替代文字

我知道我可以使用Flash/Silverlight小部件或编写自定义HttpModule来截取上传并自己处理它们,但是如果HttpPostedFileMSDN说它做了什么(或者我做错了),当前的要求将完美无缺.

asp.net-mvc upload httppostedfilebase

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

HttpPostedFileBase.SaveAs工作但没有上传文件,没有例外

首先,这是我的代码:

private Shoe ProcessForm(Shoe shoe, HttpPostedFileBase image)
{
    try
    {
        shoe.Slug = CMSHelper.SanitizeTitle(shoe.Name);
        shoe.LastModification = DateTime.Now;

        if ((image != null) && (image.ContentLength > 0))
        {
            string fileName = String.Concat(shoe.ShoeId, Path.GetExtension(image.FileName));
            shoe.Image = fileName;

            string filePath = Path.Combine(Server.MapPath(shoe.ImagePath), fileName);
            image.SaveAs(filePath);
        }
    }
    catch (Exception e)
    {
        throw e;
    }

    return shoe;
}
Run Code Online (Sandbox Code Playgroud)

在本地,这段代码工作正常.目录的权限很好.并且它在其他服务器上随机工作(我在测试VPS提供程序时在4或5个不同的服务器上测试了此代码).

但是,如果我尝试从我的家用计算机运行它,一切都顺利通过,数据库中保存了一个文件名但没有上传文件.没有例外!!!

我一直试图解决这个问题差不多三天而且这么多无用的时间,请帮助我......我只是不明白这有什么问题......

c# asp.net httppostedfilebase asp.net-mvc-3

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

.Net multipart/form-data form enctype和UTF-8"special"characters => (MVC w/HttpPostedFileBase)

目标:

将带有UTF-8字符的CSV文件上传/发布到MVC操作,读取数据并将其粘贴到数据库表中.

问题:

只有纯文本字符才能通过.像á这样的UTF-8"特殊"字符没有正确传递,在代码和数据库中它们呈现为此字符=> .

更多:

我确信这不是我的C#代码的问题,尽管我已经包含了下面的重要部分.

我认为问题是上传的文件是以纯文本或"纯文本"MIME类型编码的,但我可以通过将文件扩展名更改为.html来更改它

摘要:

如何获得一个enctype属性设置为"multipart/form-data"的表单,以正确解释已发布文件中的UTF-8字符?

研究:

从我的研究来看,这似乎是一个普遍的问题,没有一个共同和明确的解决方案

我发现了比.Net更多的java和PHP解决方案.


  • csvFile变量的类型为HttpPostedFileBase

  • 这是MVC动作签名

[HttpPost]

public ActionResult LoadFromCsv(HttpPostedFileBase csvFile)


我试过的事情:

1)

using (Stream inputStream = csvFile.InputStream)
{
    byte[] bytes = ReadFully(inputStream);
    string bytesConverted = new UTF8Encoding().GetString(bytes);
}
Run Code Online (Sandbox Code Playgroud)

2)

using (Stream inputStream = csvFile.InputStream)
{
    using (StreamReader readStream = new StreamReader(inputStream, Encoding.UTF8, true))
    {
        while (!readStream.EndOfStream)
        {
            string csvLine = readStream.ReadLine();
            // string csvLine = new UTF8Encoding().GetString(new UTF8Encoding().GetBytes(readStream.ReadLine())); // stupid... this can not be the way!
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

3) …

.net asp.net-mvc file-upload utf-8 httppostedfilebase

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

从 HttpPostedFileBase 获取文件路径

我正在使用 ASP.NET MVC 4,我正在尝试获取上传文件的路径,以便打开和操作它。这就是我继续的方式:

控制器

public ActionResult Bulk(HttpPostedFileBase file)
{
    FileStream fs = System.IO.File.Open(Server.MapPath(file.FileName), 
                                         FileMode.Open, FileAccess.Read);

    return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

看法

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

    @using (Html.BeginForm("Bulk", "Bulk", null, FormMethod.Post, new 
                                          { enctype = "multipart/form-data" }))
    {
        @Html.ValidationSummary(true)

        <fieldset>
            <p>
                <input type="file" name="file"/>
            </p>
            <div class="form-actions">
              <button type="submit" class="btn btn-primary">Create</button>
            </div>
        </fieldset>
    }
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到一个错误,说... Could not find a part of the path ...

如何获取文件实际所在的路径?

c# asp.net-mvc file-upload filepath httppostedfilebase

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

是否可以使用jQuery将文件从文件输入传递给控制器​​?

我正在尝试将文件作为HttpPostedFileBase传递给我的Controller,因此我可以解析文件并将信息传递回页面.例如,我想允许用户导入vCard,并让它自动填充联系人创建表单PartialView.

我想通过传入文件,填充我的模型然后返回页面的PartialView来显示在页面上.我试过像下面的jQuery,但我永远不能让我的HttpPostedFileBase正确传递(总是为null).请记住,我需要在发布后访问文件的InputStream.

var file = "files=" + $("#fileInput").files[0];
$.post("/Contacts/UploadContact/", file, function (returnHtml) {
    alert(returnHtml);
    $("#contactContainer").html(returnHtml);
});
Run Code Online (Sandbox Code Playgroud)

是否可以通过jQuery将文件作为HttpPostedFileBase发布到我的Controller?

asp.net-mvc jquery file-upload httppostedfilebase

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

HttpPostedFileBase始终保持为空mvc

我知道有很多像这样的问题,但是我把它们全部读出来并且它们无效解决了我的问题.下面我将展示我在视图和控制器中的代码,以便您可以了解我的代码.

View :
<td><% using (Html.BeginForm("Index", "Home", FormMethod.Post, new {enctype = "multipart/form-data"})) { %>
<%: Html.ValidationSummary(true) %>
                <div id="section1"> 
    <div class="editor-label">
        <%: Html.LabelFor(model => model.Name) %>
    </div>
<label for="file">Filename:</label>
        <input type="file" name="myfile" id="File5" value="Choose File Banner1" />
     <p>&nbsp;</p>

And here is my controller:
[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(HomeModel model, string submitButton, HttpPostedFileBase myfile)
    {
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚问题是什么问题..请有人帮助我

httppostedfilebase asp.net-mvc-4

4
推荐指数
1
解决办法
8233
查看次数