【问题标题】:Save binary as file将二进制文件另存为文件
【发布时间】:2011-11-30 18:56:43
【问题描述】:

如何将二进制字符串保存为文件?我正在从 Excel 发布二进制字符串。这是代码:

Sub PostFileAsBinary()

Dim Filename  As String
Filename = "\\Network Drive\Test File\TestFile.pdf"
FileURL = "http://localhost:11212/Upload/BinaryFile/"

Dim ReadFile As String
Dim n As Integer
n = FreeFile()

Open Filename For Binary As n
ReadFile = String(LOF(n), vbNullChar)
Get n, , ReadFile
Close n
Debug.Print ReadFile

Set httpReq = New MSXML2.XMLHTTP
httpReq.Open "POST", FileURL & "?ID= " & 2, False
httpReq.SetRequestHeader "Content-Length", Len(ReadFile)
httpReq.send ReadFile

Debug.Print httpReq.responseText
ReadFile = ""
Set httpReq = Nothing

End Sub

这是我的控制器操作:

        [HttpPost]
    public ActionResult PostLPFile(int LPKey, string ReadFile)

    {
        using (FileStream srReadFile = new FileStream(@"D:\Temp", FileMode.Create))

        {
            using (BinaryWriter writer = new BinaryWriter(srReadFile))
            {
                writer.Write(ReadFile);

                writer.Close();
            }
        }
        return View();

我已成功发布二进制文件,但无法在上述位置上传文件:\\Network Drive\Posted File

我想我必须将发布的二进制字符串转换为流,我想我正在努力解决这个问题。有人可以调查一下并提供帮助吗?

【问题讨论】:

  • @user793468,你试过在本地写吗?在 UNC 地址之前先尝试一下,并确保 IIS 向其他域输出写入不是问题。 (@squillman,我的错)
  • @one 其实不是我的问题,我只是整理了一下。
  • @one.beat.consumer 我在本地有:FileURL = "localhost:11212/Upload/BinaryFile"
  • @user793468,“但无法上传”没有用。请提供详细信息(异常类型+消息)。还可以尝试在本地保存(如建议的那样),即保存到临时文件夹以避免所有权限问题。
  • @AlexeiLevenkov 我将其更改为“D:\Temp”并得到错误:访问路径“D:\Temp”被拒绝。我确实有权访问该文件夹,为什么会出现此错误?

标签: c# asp.net-mvc file-upload http-post


【解决方案1】:

在 ASP.Net 中访问目录位置的安全性取决于您的 Web 应用程序中如何实现安全性:

如果您要模拟最终用户或特定用户,则该用户需要有权访问目录位置。

如果您不使用模拟,那么您的网站正在其中运行的应用程序池的用户身份将需要访问目录。

更新

有关 ASP.Net 中模拟的含义的更多信息,请参阅this MSDN article

【讨论】:

  • 我没有冒充任何人,我是以我自己的身份登录的。有没有办法冒充管理员?
  • @user793468:我所说的模拟是指 ASP.Net 请求正在执行的用户上下文。我更新了答案以包含指向 MSDN 上一些文档的链接,该文档提供了对该主题的全面概述。我认为对您来说最简单的方法是将 IIS 应用程序池用户修改为有权访问该网络共享的域用户。
  • @user793468,competent_tech 是正确的...... IIS 正在以某人的身份运行您的 Web 应用程序,无论是像 System 这样的内置帐户,还是 NetworkService、AppPoolIdentity 或其他自定义帐户,我们都没有知道...问题是用于运行您的应用程序的任何帐户都是您用来编写文件的帐户。此外,使用 WindowsAuth 或 Impersonation 之类的身份验证模式将导致代表经过身份验证的用户帐户进行访问,因此他们需要特权。最后,域外文件操作更加棘手,因为它们会离开服务器。
  • ...继续...首先弄清楚本地保存的权限...一旦弄清楚,然后开始研究使用 UNC 地址进行域外文件共享
  • @one.beat.consumer 我解决了访问问题。我遇到的下一个问题是无法将发布的数据从“ReadFile”保存到我的控制器操作中的变量中。我知道有一种方法可以将发布的文本分配给控制器操作中的变量,但不知道如何
猜你喜欢
  • 1970-01-01
  • 2010-11-01
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多