通过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获取上传文件的路径
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
那你的样品中使用rawStoragePath的原因,而是自身的文件名。 – vendettamit
@vendettamit我想我可以使用fileStream.Name来获取正在上传文件的完整路径,但是有没有一种方法可以让'Test.docx'而不是'../../Test.docx'? – Masriyah
尝试Path.GetFileName(“.././ Test.docx”) – vendettamit