如何从InputStremed文件中获取更多信息?

时间:2011-09-01 07:03:33

标签: asp.net-mvc-3 file-upload inputstream

如果我使用InputStream来接收文件,例如

HttpContext.Current.Request.InputStream

如何获取有关该文件的更多信息?

我可以轻松地将Stream转换为物理文件,但例如,我如何知道正在使用的文件扩展名

string fileIn = @"C:\Temp\inputStreamedFile.xxx"; // What extension?

using (FileStream fs = System.IO.File.Create(fileIn))
{
    Stream f = HttpContext.Current.Request.InputStream;
    byte[] bytes = new byte[f.Length];
    f.Read(bytes, 0, (int)f.Length);
    fs.Write(bytes, 0, bytes.Length);
}

这背后的想法是因为使用HttpPostedFileBase我总是得到null:

public ContentResult Send(HttpPostedFileBase fileToUpload, string email)
{
    // Get file stream and save it

    // Get File in stream
    string fileIn = Path.Combine(uploadsPath, uniqueIdentifier),
           fileOut = Path.Combine(convertedPath, uniqueIdentifier + ".pdf");

    // Verify that the user selected a file
    if (fileToUpload != null && fileToUpload.ContentLength > 0)
    {
        // extract only the fielname
        string fileExtension = Path.GetExtension(fileToUpload.FileName);
        fileIn = String.Concat(fileIn, fileExtension);

        fileToUpload.SaveAs(fileIn);
    }

    // TODO: Add Convert File to Batch

    return Content("File queued for process with id: " + uniqueIdentifier);
}

这就是我从命令行发送的内容:

$ curl --form email='mail@domain.com' --form fileToUpload='C:\temp\MyWord.docx' http://localhost:64705/send/
File queued for process with id: 1d777cc7-7c08-460c-8412-ddab72408123

变量email已正确填充,但fileToUpload始终为空。

P.S。如果我使用表单上传相同的数据,这种情况不会发生

3 个答案:

答案 0 :(得分:1)

如果这没有用,我很抱歉,但为什么要使用InputStream来获取上传的文件?

这就是我通常做的事情:

[HttpPost]
public ActionResult Upload(HttpPostedFileBase[] files) {
    String physicalPath = "c:\\whatever";
    foreach (var file in files) {
        String extension = Path.GetExtension(file.FileName);
        file.SaveAs(physicalPath + "\\" + file.FileName);
    }
    return View();
}

答案 1 :(得分:1)

我发现的唯一问题是使用卷曲...我忘记了@符号,提到上传的表单会被编码为multipart/form-data

使用HttpPostedFileBase的正确curl命令是:

$ curl --form email='mail@domain.com' 
       --form fileToUpload=@'C:\temp\MyWord.docx' 
       http://localhost:64705/send/

答案 2 :(得分:0)

您可以从<input type="file" />获取有关已发布文件的信息。但实际上它在asp.net mvc check out here

中使用了一些不同的方式上传文件