通过FileStream处理上传的文件

时间:2013-06-27 19:37:51

标签: c# asp.net-mvc filestream

我允许用户上传文件(doc,pdf,excel,txt),然后我传入FileStream进行读取然后写入但打开后我调用存储过程以便我可以存储文件名,日期,上传用户以及我将在哪里复制它。我的问题是如何处理已在FileStream中填充的字符串文件名,并且存储过程需要一个字符串文件名。

string docx = @"../../TestFiles/Test.docx";
try
 {
     FileStream fileStream = new FileStream(docx, FileMode.Open, FileAccess.Read);
     docConverter.UpLoadFile(11, "Test.docx", "../../TestFiles/", 1, "../../Temp/", 89);
 }

public void UpLoadFile(int studentId, string rawStoragePath, int uploadedByUserId,   string storagePath, int assignmentElementsId)
 {
     Guid strGUID = Guid.NewGuid();
     DateTime uploadDate = DateTime.UtcNow;

     //calling stored procedure                
     stuSubSvc.UploadWork(studentId, strGUID, (need to pass file name), rawStoragePath,  uploadDate, uploadedByUserId, storagePath, 0, assignmentElementsId);
 }

帮助:
1 - 从FileStream中的文件获取文件名
2 - 从FileStream获取上传文件的路径

3 个答案:

答案 0 :(得分:1)

您无法在客户端计算机上获取该文件的路径。 FileStrame有一个名为Handle的属性,它包含打开文件的本机句柄,你按照下面的文章它将帮助你通过句柄获取文件名,它是在C ++中但所有函数都是API可以用P调用/在C#[DllImport]中调用。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366789(v=vs.85).aspx

修改


抱歉Handle已经过时使用 SafeFileHandle 而不是

答案 1 :(得分:1)

要从完整路径中获取文件名,您可以使用:

Path.GetFileName(".././Test.docx")

它会给你Test.docx

答案 2 :(得分:0)

  

1 - 从FileStream中的文件获取文件名

流中没有文件名。您可以从控制器操作接收的HttpPostedFileBase实例获取上载文件的文件名作为参数。看看Phil Haack的blog post关于在ASP.NET MVC应用程序中上传文件的问题,并在其中说明了这一点。

假设您已将文件存储在文件系统中,则可以从FileStream的Name属性中检索文件名:

string filename = Path.GetFileName(fileStream.Name);
  

2 - 从FileStream获取上传文件的路径

流中没有文件名或文件路径。您可以获得的所有内容都是控制器操作应作为参数接收的HttpPostedFileBase实例中包含的文件名(请参阅上一点)。