【问题标题】:File upload for e-mail attachment using Angularjs使用 Angularjs 为电子邮件附件上传文件
【发布时间】:2015-06-10 15:15:04
【问题描述】:

我有一个用 Angularjs 和 PHP(Slim 框架)编写的表单。 在表单中,用户需要能够上传文件 (pdf),该文件将在表单提交后作为自动生成的电子邮件(使用 phpmailer 发送)的附件发送。

我为解决我的问题进行了研究,但没有找到任何适合我的方法。

有人知道如何解决这个问题吗?

【问题讨论】:

标签: php angularjs file-upload phpmailer slim


【解决方案1】:

首先,您需要设置 HTML。您还可以找到示例here

<div popover="Open a previously saved project." popover-trigger="mouseenter" class="form-button" ng-file-select ng-model="file">Open Existing Project</div>

注意我这里有一个弹窗,上传时出错,弹窗没有消失,我建议不要使用它或在这里发布解决方案;)

然后对为您的文件上传设置的变量使用监视。

//Watch file for changes to run open file dialog
$scope.$watch('file', function () {
    //Only make the ajax call if there is a file to upload
    if ($scope.file) {
        ajaxFactory.openFileDialog($scope.file, setProjectData);
    }
});

在我的例子中,我有一个调用 MVC 控制器的 ajax 包装器

    /// <summary>
    /// Save a file to the server
    /// </summary>
    /// <returns></returns>
    [HttpPost]
    public JsonResult Upload(HttpPostedFileBase file)
    {
        var retObject = new JsonReturnObject();

        try
        {
            // Read bytes from http input stream
            BinaryReader b = new BinaryReader(file.InputStream);
            var binData = b.ReadBytes((int)file.InputStream.Length);

            retObject.StringPayload = NttCommon.GetString(binData);
            retObject.Success = true;

            b.Close();
            b.Dispose();
        }
        catch (ArgumentNullException ane)
        {
            Log.Error("An ArgumentNullException occured while uploading to FileManagerController.", ane);
            retObject.StringPayload = ane.InnerException.ToString();
        }
        catch (ArgumentOutOfRangeException aoore)
        {
            Log.Error("An ArgumentOutOfRangeException occured while uploading to FileManagerController.", aoore);
            retObject.StringPayload = aoore.InnerException.ToString();
        }
        catch (DecoderFallbackException dfe)
        {
            Log.Error("An DecoderFallbackException occured while uploading to FileManagerController.", dfe);
            retObject.StringPayload = dfe.InnerException.ToString();
        }
        catch (ArgumentException ae)
        {
            Log.Error("An ArgumentException occured while uploading to FileManagerController.", ae);
            retObject.StringPayload = ae.InnerException.ToString();
        }
        catch (IOException ioe)
        {
            Log.Error("An IOException occured while uploading to FileManagerController.", ioe);
            retObject.StringPayload = ioe.InnerException.ToString();
        }
        catch (ObjectDisposedException ode)
        {
            Log.Error("An ObjectDisposedException occured while uploading to FileManagerController.", ode);
            retObject.StringPayload = ode.InnerException.ToString();
        }
        catch (Exception e)
        {
            Log.Error("An unknown exception occured while uploading to FileManagerController.", e);
            retObject.StringPayload = e.InnerException.ToString();
        }

        return FormatJsonReturnResult.ReturnStandardJsonResult(retObject);
    }

【讨论】:

  • 我需要将 ajax 包装器放在哪里?在我的控制器中?
  • ajax 包装器只是一个 JavaScript 文件,其中包含对您的服务器的 ajax 调用。因为您使用的是 PHP,所以它会因您而异。我的例子是 ASP.Net。我正在使用 ajax 调用 MVC 控制器,您可能正在调用 Web 服务或其他东西。我使用 ajax 包装器将所有 ajax 调用保存在一个地方,这样我就知道在哪里可以找到它们。如果您的网站很小,将 ajax 调用与其余 JS 代码一起放置并没有什么坏处,但它很容易变得混乱。
【解决方案2】:

我用uploadify解决了我的问题

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 2014-11-09
    • 2012-02-06
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    相关资源
    最近更新 更多