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

PHP:在创建新记录时上载图片,php,image,upload,record,Php,Image,Upload,Record,这更多的是一个概念性问题,而不是底层编程技术 当我在创建一个新记录的过程中(比如添加记录屏幕),记录ID对我来说还不可用。同一屏幕还可以使用SWFUpload上传图片,这意味着图片可以立即上传 由于记录id还不可用,在我点击保存按钮之前,无法将此特定图片与数据库中的记录相关联 现在假设,上传完图片后,我离开添加记录屏幕,在服务器上留下一个孤立的图片文件 我可以回到“添加记录”屏幕并继续这样做。。。并用未链接/未使用的映像占用相当大的服务器空间 你将如何解决这个问题?这里应该实施什么样的逻辑流程


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

当我在创建一个新记录的过程中(比如添加记录屏幕),记录ID对我来说还不可用。同一屏幕还可以使用SWFUpload上传图片,这意味着图片可以立即上传

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

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

我可以回到“添加记录”屏幕并继续这样做。。。并用未链接/未使用的映像占用相当大的服务器空间

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

一个选项(我现在正在试验)是将上传的图像存储在tmp文件夹中,并在创建记录后将其移出并放置在另一个适当的文件夹中(在图片的最终静止位置有一个链接)。然后,每晚运行cron作业以清除tmp文件夹中的剩余内容

还有其他更聪明、更优雅的方法吗

谢谢,

m^e

上传文件时,默认情况下会获得临时名称,使用它或用自己的名称覆盖,保存记录时应使用此临时名称以连接图像,当记录插入时,可根据记录ID更改文件名,临时名称更改(Remomed)之后…

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


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

这是一个古老的问题,所以你可能已经解决了,但我就是这样解决的:

  • 在数据库中创建一个名为ImgGuid的字段,默认值为0(varchar),以标识图像。我通常只使用带或不带图像扩展名的Guid。路径可以在其他地方配置
  • 在上传页面中创建一个名为hfImgGuid(或其他)的hiddenfield,并从数据库中加载ImgGuid值,如果没有记录,则该值应为0
  • 现在在您的上载处理程序中检查 值为0,如果是,请创建一个新的 此图像的Guid并将其返回到 您的SWF加载并使用此值设置hfImgGuid。还将Guid存储在用户会话中
  • 当用户按“保存”时,hfImgGuid值将保存在“ImgGuid”字段中,因此您的图像将连接到记录。当用户希望以后更改其照片时,您可以选择覆盖当前图像(或创建新的Guid并删除旧的Guid,但在本例中更容易)
  • 我们遇到的唯一问题是,当一个用户在“新记录”上创建并上传一张图片,然后决定离开页面时,你会发现自己有一张孤立的图片。因此,用户会话就开始了。当用户保存页面时,您可以从会话中删除图像,如果用户未保存图像且会话结束,您可以读取值并删除孤立图像

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

    是的。基于香草HTML的上传肯定是这里最干净的。不幸的是,ajax上传功能是我的客户机D的“需求”,所以我看不到任何解决办法。饼干的主意很好。。但我还是要把它们都放在tmp文件夹里,以后再清理。谢谢马克。我的想法是采取一种有点类似的方法,但这确实使它更加清晰。