如何使用 FileUpload Interface (GUI) 将文件保存到 asp.net 中的选定位置?

Posted

技术标签:

【中文标题】如何使用 FileUpload Interface (GUI) 将文件保存到 asp.net 中的选定位置?【英文标题】:How to Save files with a FileUpload Interface (GUI) to a chosen location in asp.net? 【发布时间】:2013-05-01 14:24:14 【问题描述】:

这归结为简单地保存到 asp.net 中的特定位置。 类似于在 Microsoft Word 等任何标准程序中使用“另存为...”。

我正在寻找的 GUI 与 asp.net 中 FileUpload 控件的 GUI 完全相同。 但是,FileUpload 控件只允许您将文件上传到正在运行的程序。 我只想选择一个位置来保存在程序中创建的文件。

我已经写了以下代码:

        protected void btnSaveYourBuild_Click(object sender, EventArgs e)
        

// A节

        System.Drawing.Image chosenGoldenLineTop = GetSystemDrawingImage(ImageGoldenLineTop);
        System.Drawing.Image chosenGoldenLineBottom = GetSystemDrawingImage(ImageGoldenLineBottom);
        System.Drawing.Image chosenImageTop = GetSystemDrawingImage(ImageTop);
        System.Drawing.Image chosenImageJungle = GetSystemDrawingImage(ImageJungle);
        System.Drawing.Image chosenImageMid = GetSystemDrawingImage(ImageMid);
        System.Drawing.Image chosenImageAdc = GetSystemDrawingImage(ImageAdc);
        System.Drawing.Image chosenImageSupp = GetSystemDrawingImage(ImageSupp);

// B节

        Bitmap B = new Bitmap(chosenGoldenLineBottom.Width, chosenGoldenLineBottom.Height + chosenImageSupp.Height + chosenGoldenLineTop.Height);
        using (Graphics g = Graphics.FromImage(B))
        
            g.DrawImage(chosenGoldenLineTop, 0, 0, 1540, 49);
            g.DrawImage(chosenImageTop, 0, chosenGoldenLineTop.Height, 308, 560);
            g.DrawImage(chosenImageJungle, chosenImageTop.Width, chosenGoldenLineTop.Height, 308, 560);
            g.DrawImage(chosenImageMid, chosenImageTop.Width + chosenImageJungle.Width, chosenGoldenLineTop.Height, 308, 560);
            g.DrawImage(chosenImageAdc, chosenImageTop.Width + chosenImageJungle.Width + chosenImageMid.Width, chosenGoldenLineTop.Height, 308, 560);
            g.DrawImage(chosenImageSupp, chosenImageTop.Width + chosenImageJungle.Width + chosenImageMid.Width + chosenImageAdc.Width, chosenGoldenLineTop.Height, 308, 560);
            g.DrawImage(chosenGoldenLineBottom, 0, chosenGoldenLineTop.Height + chosenImageTop.Height, 1540, 53);
        

// C节

            B.Save(System.IO.Path.Combine(
            Environment.GetFolderPath(
            Environment.SpecialFolder.Desktop),
            "Team Awesome v3" + ".png")); 
           // Saves on the desktop
        

为了您的方便,我将大量代码分为 3 个部分,A、B 和 C。 简单地说: A 部分有 7 张图像。 B 部分将 7 个图像组合成 1 个更大的图像。 C 部分将图像保存到桌面。

我已经对此感到非常满意。但是,我确信用户希望能够选择一个特定的位置来保存这 1 个更大的图像,至少我会这样做。

现在,我试图找到的解决方案是一个可以将 1 个更大的图像保存到用户选择的位置的控件,它可以替换 C 部分。

一个控件,它选择一个特定位置并能够返回一个路径,我可以将 1 个更大的图像保存到该路径,仅替换 C 节的单个参数。

我尝试了许多不同的方法,但在第一次尝试时都被证明无效或失败。比如 FileDialog 系统(在 asp.net 中是不可用的),FileUpload 控件,它只向程序上传文件,而不是相反。

请注意如何尝试从 FileUpload 控件获取路径并尝试给用户造成他正在保存文件的错觉。但是,不能简单地将文件名编辑(在保存之前,就像在任何正常情况下一样)插入到 FileUpload 控件中,您也不能实际选择一个目录,您必须选择一个文件并切断路径中的文件名,导致用户感到困惑。

我花了大约 17 个小时试图找到解决方案,但我失败了。 你能帮帮我吗?

【问题讨论】:

【参考方案1】:

用户保存取决于浏览器,出于安全原因,asp.net 在沙箱中工作无法更改。也许浏览器上的插件/附加组件可以帮助您实现功能,但您尝试的解决方案仍然不太可能。 使用浏览器插件,您可以通过让它侦听 Web url 然后提示用户保存文件来实现它,该文件实际上将剪切粘贴保存在用户系统中的文件(比如临时文件夹)。 但同样需要在用户浏览器上安装一个浏览器插件,这对用户来说是可选的,并且每个浏览器的编写方式都不同。 问候

【讨论】:

这似乎很难。好的,那么考虑到反馈,我有 3 个选项:1.“找到一个通用的特定插件,并实现我想要的功能”2.“制作 2 个按钮,其中 1 个按钮像现在一样将图像保存到桌面,以及另一个(连同文本框)允许用户填写将保存图像的特定路径”3.“等待替代解决方案”现在我将等待替代解决方案,因为我只问了这个 1一个小时前。此后,我将使用这些答案或选择选项 2。感谢您的努力 Alok ;)

以上是关于如何使用 FileUpload Interface (GUI) 将文件保存到 asp.net 中的选定位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jupyter 实验室中使用 FileUpload 小部件?

使用FileUpload控件上传,如何获取原文件名?

如何正确使用 ASP.NET FileUpload 控件

如何从 asp.net 中的自定义 FileUpload 获取文件流?

如何在简单模式和 ajax="true" 中使用 <p:fileUpload>?

您如何验证两个 asp:FileUpload 实例以使用 jquery 验证文件?