【问题标题】:PHP: Uploading a picture while creating a new recordPHP:在创建新记录时上传图片
【发布时间】:2011-06-18 09:23:24
【问题描述】:


这更像是一个概念性问题,而不是底层编程技术。

当我正在创建新记录时(比如添加记录屏幕),我还无法使用记录 ID。同一屏幕也可以选择使用 SWFUpload 上传图片 - 这意味着图片会立即上传。

由于记录 ID 尚不可用,因此在我点击 保存 按钮之前,无法将此特定图片与数据库中的记录相关联。

现在假设,在上传图片后,我离开了添加记录屏幕,在服务器上留下了一个孤立的图片文件。

我可以返回“添加记录”屏幕并继续执行此操作...并使用未链接/未使用的图像占用相当大的服务器空间。

您将如何解决这个问题?这里应该执行什么逻辑流程?

一个选项(我现在正在尝试)是将上传的图像存储在 tmp 文件夹中,并在创建记录后将它们移出并放置在另一个适当的文件夹中(带有链接的图片在它的最后安息地)。然后,运行每晚的 cron 作业以清除 tmp 文件夹中的剩余部分。

还有其他更明亮和优雅的方法吗?

谢谢,
m^e

【问题讨论】:

    标签: php image upload record


    【解决方案1】:

    文件上传时默认获取临时名称,使用或用自己的覆盖,此临时名称应在保存记录时使用该临时名称连接图像,当记录插入文件名可以根据记录ID更改,之后临时名称更改(删除)...

    【讨论】:

      【解决方案2】:

      您可以通过将所有上传项目的路径存储在客户端计算机上的 cookie(或 cookie,如果使用不同的浏览器)中来消除至少部分问题。

      或者,不要使用 SWFUpload,使用普通的 HTML“input type=file”上传,并在添加相关照片之前强制创建记录。这可以说是解决潜在混乱问题的最干净的解决方案。

      【讨论】:

      • 是的。基于香草 HTML 的上传肯定是这里最干净的上传。不幸的是,ajax 上传功能是我的客户的“需求”:D 所以我看不出有什么办法。 cookie 的想法很不错.. 但我还是要把它们全部放在某个 tmp 文件夹中,我猜,以便稍后清理。
      【解决方案3】:

      有点老的问题,所以你可能想通了,但这就是我解决它的方法:

      1. 在您的数据库中创建一个名为 ImgGuid 的字段,默认值为 0 (varchar) 以识别图像。我通常只使用带有或不带有图像扩展名的 Guid。路径可以在其他地方配置。
      2. 在您的上传页面中创建一个名为 hfImgGuid(或其他)的隐藏字段并从数据库中加载 ImgGuid 值,如果没有记录,则该值应为 0
      3. 现在在您的上传处理程序中检查是否 值为 0,如果是,则创建一个新的 此图像的指南并将其返回到 您的 swfupload 并使用此值设置您的 hfImgGuid。还将 Guid 存储在用户会话中。
      4. 当用户按下“保存”时,hfImgGuid 值将保存在“ImgGuid”字段中,因此您的图像已连接到记录。当用户想稍后更改其照片时,您可以选择覆盖当前图像(或创建一个新的 Guid 并删除旧的,但对于这个例子来说更容易)
      5. 我们遇到的唯一问题是,当用户在“新记录”上创建并上传图片然后决定离开页面时,您会发现自己看到了一张孤立的图片。因此,用户会话就位。当用户保存页面时,您可以从会话中删除图像,如果用户不保存并且会话结束,您可以读取值并删除孤立图像。

      我希望你明白这个想法,如果你想把它做对,它会变得非常复杂,而且有很多方法可以做到,但是 ajax 风格的上传看起来确实不错,没有它就很难找到专业页面.

      【讨论】:

      • 谢谢马克。我的想法是采取一种类似的方法,但这确实使它更清晰。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2014-10-16
      • 1970-01-01
      • 2011-09-29
      • 2021-05-27
      • 2012-09-28
      相关资源
      最近更新 更多