0

我允许用户上传文件(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 中获取上传文件的路径

4

3 回答 3

1

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

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

编辑


抱歉,句柄已过时,请改用SafeFileHandle

于 2013-06-27T19:57:38.353 回答
1

要使文件名脱离完整路径,您可以使用:

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

它会给你Test.docx

于 2013-06-27T19:58:08.160 回答
0

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

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

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

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

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

流中没有文件名或文件路径。您所能希望得到的只是文件名,该文件名包含在HttpPostedFileBase您的控制器操作应作为参数接收的实例中(请参阅前一点)。

于 2013-06-27T19:54:46.723 回答