如果我使用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。如果我使用表单上传相同的数据,这种情况不会发生。
答案 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