我正在使用PHP for product表中的Bulk Import功能。我想知道你如何导入产品的图像?通过csv或通过其他方式从外部上传它?
我一直致力于从csv文件导入所有其他列。只剩下图像列。
编辑:我不想要代码。我只想问你喜欢怎么做?您会上传带有CSV或其他媒体上传实施的图片吗?感谢。
答案 0 :(得分:3)
您可以使用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);
}
答案 1 :(得分:2)
存储图像的方法有两种:
在大多数项目中,图像存储在服务器上,只有路径存储在数据库中。这是您可以在此处阅读的旧讨论:Storing Images in DB - Yea or Nay?
如果您有一个.csv,整个图像存储在文本列中(这种可能性很小),您可以在数据库中设置TEXT
或BLOB
列。
推荐的方法是将图像作为文件存储在服务器上。因此,项目中需要的是包含一个或多个图像名称或图像路径的.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个产品),我推荐的流程是这样的:
将.csv导入数据库,包括图像名称或路径(在上传脚本中,您可以更改或扩展图像路径)
将图像复制到服务器(例如通过FTP)或通过单独的上传脚本 - 只需确保图像名称/路径匹配
答案 2 :(得分:1)
您有两种选择: 1:将图像路径放入csv并将csv数据导入数据库,并使用FTP将图像上传到相应的路径。 2:将图像路径放到csv中并以编程方式处理每一行并使用代码上传每个图像。
每种方法都有自己的优点和缺点。 对于方法1:您可以在很短的时间内导入产品,但是您需要手动将图像上传到服务器,并且没有任何状态报告以查找丢失的图像。 对于方法2:您可以使用包含每行的状态报告的图像导入产品产品,但您需要编写更多代码。
现在,您可以选择要使用的方法。您的选择取决于您需要执行此操作的频率。你应该选择第一个选项,如果你需要在月球上做一次,否则你应该选择第二个选项。
您还可以使用博客数据类型将图像存储在数据库中,但不建议这样做。如果您拥有大量产品,则可能会导致许多数据库性能问题。
答案 3 :(得分:1)
您需要上传服务器上的所有图像,或者从您想要获取图像的路径中获取它可以在除本地计算机之外的任何服务器上的路径
并在CSV中说明要在应用程序中上传的相同名称。
您需要在代码中执行的操作是提供图片上传位置的路径,并从上传的CSV中获取名称。
然后,您可以将图像上传到所需位置,并根据需要将名称保存在数据库中。
答案 4 :(得分:0)
它还取决于您的应用程序所需的内容。如果您更担心安全性而不是方便,请将它们作为博客文件保存到数据库中。如果您更关心性能,请将目录放入服务器。