首页 文章

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

提问于
浏览
6

这更像是 conceptual question 而不是底层编程技术 .

当我正在创建新记录(例如“添加记录”屏幕)时,记录ID尚不可用 . 同样的屏幕也可以选择使用SWFUpload上传图片 - 这意味着图片会立即上传 .

由于记录ID不是't available yet, there',因此无法将此特定图片与DB中的记录相关联,直到我按下 Save 按钮 .

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

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

你会如何解决这个问题?应该在这里实施什么样的逻辑流程?

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

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

谢谢,
米^ E

3 回答

  • 0

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

    • 在数据库中创建一个名为ImgGuid的字段,默认值为0(varchar)以标识图像 . 我通常只使用带有或不带图像扩展名的Guid . 路径可以在其他地方配置 .

    • 在上传页面中创建一个名为hfImgGuid(或其他)的隐藏字段,并从数据库加载ImgGuid值,如果没有记录,则该值应为0

    • 现在在您的上传处理程序中检查值是否为0,如果是,为此图像创建一个新的Guid并将其返回到您的swfupload并使用此值设置您的hfImgGuid . 还将Guid存储在用户会话中 .

    • 当用户按'Save'时,hfImgGuid值将保存在'ImgGuid'字段中,因此您的图像将连接到记录 . 当用户想要稍后更改其照片时,您可以选择覆盖当前图像(或创建新的Guid并删除旧的Guid,但对于此示例更容易)

    • 我们遇到的唯一问题是,当用户在'New record'上创建并且他上传了一张图片然后决定离开页面时,您会发现自己带有一个orphant图像 . 所以这里是用户会话到位 . 当用户保存页面时,您可以从会话中删除图像,如果用户没有保存它并且会话结束,您可以读取值并删除orphant图像 .

    我希望你能得到这个想法,如果你想要做到这一点会变得非常复杂,并且有很多方法可以做到这一点,但是ajax风格的上传看起来确实很好,没有它就很难找到专业页面 .

  • 1

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

  • 3

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

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

相关问题