PHP:在创建新记录时上传图片

时间:2011-01-31 05:39:21

标签: php image upload record


   这更像是一个概念性问题而不是基础编程技术。

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

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

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

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

你会如何解决这个问题?应该在这里强制执行什么逻辑流程?

一个选项(我现在正在尝试)是将上传的图像存储在 tmp 文件夹中并将其移出并在创建记录后将它们放在另一个适当的文件夹中(将图片链接到最后的休息处)。然后,运行夜间cron作业以清除tmp文件夹中的剩余物。

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

谢谢,
米^ E

3 个答案:

答案 0 :(得分:3)

有点老问题,所以你可能已经弄明白了,但这就是我如何解决它:

  1. 在数据库中创建名为ImgGuid的字段,默认值为0(varchar)以标识图像。我通常只使用带有或不带图像扩展名的Guid。路径可以在其他地方配置。
  2. 在您的上传页面中创建一个名为hfImgGuid(或其他)的隐藏字段,并从数据库加载ImgGuid值,如果没有记录,则该值应为0
  3. 现在在您的上传处理程序中检查是否 值为0,如果是,则创建一个新值 指导此图像并将其返回 你的swfupload并用你的hfImgGuid设置这个值。还将Guid存储在用户会话中。
  4. 当用户按下“保存”时,hfImgGuid值将保存在“ImgGuid”字段中,因此您的图像将连接到记录。当用户想要稍后更改其照片时,您可以选择覆盖当前图像(或创建新的Guid并删除旧的Guid,但对于此示例更容易)
  5. 我们遇到的唯一问题是,当用户创建“新记录”并上传图片然后决定离开页面时,您会发现自己带有orphant图像。所以这里是用户会话到位。当用户保存页面时,您可以从会话中删除图像,如果用户没有保存它并且会话结束,您可以读取值并删除orphant图像。
  6. 我希望你能得到这个想法,如果你想要做到这一点会变得非常复杂,并且有很多方法可以做到这一点,但ajax风格的上传看起来确实很好,没有它就很难找到专业页面。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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