通过FileStream处理上传的文件

问题描述:

我允许用户上传文件(doc,pdf,excel,txt),然后我传入FileStream来读取然后写入,但打开后我打电话给存储过程我可以存储文件名,日期,上传用户和我将成为其副本的位置。我的问题是如何处理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获取上传文件的路径

+0

那你的样品中使用rawStoragePath的原因,而是自身的文件名。 – vendettamit

+0

@vendettamit我想我可以使用fileStream.Name来获取正在上传文件的完整路径,但是有没有一种方法可以让'Test.docx'而不是'../../Test.docx'? – Masriyah

+1

尝试Path.GetFileName(“.././ Test.docx”) – vendettamit

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

流中没有文件名。您可以从控制器操作收到的HttpPostedFileBase实例获取上传文件的文件名作为参数。看看菲尔哈克的blog post关于上传文件的ASP.NET MVC应用程序,他说明了这一点。

假设您已经存储在文件系统中的文件,你可以从的FileStream的名称属性来检索文件名:

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

2 - 让上传文件的路径从的FileStream

流中没有文件名和文件路径。您希望得到的是您的控制器操作应该接收的HttpPostedFileBase实例中包含的文件名(参见上一点)。

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

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

编辑


对不起句柄是过时的使用SafeFileHandle代替

要获得文件名了完整路径,你可以使用:

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

它会给你Test.docx