0

这归结为简单地保存到 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 个小时试图找到解决方案,但我失败了。你可以帮帮我吗?

4

1 回答 1

0

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

于 2013-05-01T15:13:22.140 回答