如何在批量导入功能中导入图片?

How to import images in a bulk import function?

我正在 PHP 中为产品 table 开发批量导入功能。我想知道你们如何为产品导入图像?通过 csv 还是通过其他方式从外部上传?

我一直致力于从 csv 文件导入所有其他列。只剩下图片栏了。

编辑:我不需要代码。我只是问你想怎么做?您会使用 CSV 或其他一些媒体上传实现来上传图像吗?

谢谢。

图片的存储方式有两种:

  1. 作为服务器上的文件,文件的路径存储在数据库中
  2. 整个图像存储在数据库中

在大多数项目中,图像存储在服务器上,只有路径存储在数据库中。这是一个古老的讨论,您可以在这里阅读:Storing Images in DB - Yea or Nay?

如果您有一个 .csv 文件,整个图像都存储在文本列中(这不太可能),您可以在数据库中设置一个 TEXTBLOB 列。

推荐的方式是将图像作为文件存储在服务器上。因此,您在项目中需要的是一个包含 一个或多个图像名称或图像路径的 .csv 列

在这种情况下,您必须以某种方式将导入数据和导入文件的过程分开。

然而,您可以在用户的​​一次导入操作中全部完成,这是一个示例:

<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="mycsv" />
<input type="file" name="images[]" multiple="multiple" />
</form>

您还可以通过 ftp 上传文件或使用文件上传库,这 完全取决于用例以及您需要上传的数据量句柄.

如果您有大量数据(例如每个 .csv 文件超过 100 个产品),我推荐的过程是这样的:

  1. 将您的 .csv 导入数据库,包括图像名称或路径(在您的上传脚本中,您可以更改或扩展图像路径)

  2. 将您的图像复制到服务器(例如通过 FTP)或通过单独的上传脚本 - 只需确保图像名称/路径匹配

你有两个选择: 1:将图像路径放入您的 csv 并将 csv 数据导入数据库并使用 FTP 将图像上传到相应路径。 2:将图像路径放入您的 csv 并以编程方式处理每一行并使用代码上传每张图像。

每种方法都有其优缺点。 对于方法 1:您可以在很短的时间内导入产品,但您需要手动将图像上传到服务器并且没有任何丢失图像的状态报告。 对于方法 2:您可以导入带有图像的产品产品,每行都有状态报告,但您需要编写更多代码。

现在,您可以选择要使用的方法。您的选择取决于您需要执行此操作的频率。如果你需要在月球上偶尔这样做一次,你应该 select 第一个选项,否则你应该选择第二个选项。

您也可以使用博客数据类型将图像存储在数据库中,但不建议这样做。如果您有大量产品,那可能会导致许多数据库性能问题。

这还取决于您的应用程序需要什么。如果您更担心安全而不是方便,请将它们作为博客文件保存到数据库中。如果您更关心性能,请将目录放入服务器。

您可以使用 CSV 的波纹管脚本

$row = 1;
$counter = 0;
$urls = array();

$desdir = "Destination_DIR_URL";
//Ex:  250x250/ for current directory, create the directory with named 250x250
if (($handle = fopen("targetfile.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$counter++;

$row++;

if($counter > 1 && is_array($data) && sizeof($data) > 3){

    $tmppos = strpos($data[3]."","Source_Folder_Url");

    if($tmppos === 0){
        $file = $data[3];
        $farry = explode("/",$file);
        $filename = end($farry);
        //echo $filename."<br>";
        $urls[$counter] = $file;

        //$current = file_get_contents($file);
        if(!file_exists($desdir.$filename)){
            copy($file,$desdir.$filename);
        }
    }

  }

}
 fclose($handle);
}

您需要上传服务器上的所有图像,或者从您想要获取图像的位置获取图像,它可以在除本地机器之外的任何服务器上

并在 CSV 文件中注明您要在申请中上传的名称。

您需要在代码中做的是提供图像上传位置的路径,取名来自上传的 CSV。

然后您可以将图片上传到您想要的位置,并根据需要将名称保存在数据库中。