如何使用AJAX和php将多个文件上传到服务器


How to upload multiple files to server using AJAX and php

我使用了magento mvc框架,并尝试使用AJAX上传画布ToDataURL图像。这是我的控制器

public function uploadImgAction() {        
    $mediaUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA);
    $message = '';
    $filenames = array();
    $imagename = '';
    $successCount = 0;        
    $time = date('m_d_Y_hia');
    if(isset($_POST['email']) && !empty($_POST['email'])) {
        $imagename = str_replace(array('@','.'), '_', $_POST['email']).'_';
    } else {
        $imagename = 'unknown_user_';
    }        
    if (isset($_FILES) && !empty($_FILES)) {
        foreach ($_FILES as $key => $value) {                
            try {
                $uploader = new Varien_File_Uploader($key);
                $uploader->setAllowedExtensions(array('png', 'jpg','gif'));
                $uploader->setAllowRenameFiles(true);
                $uploader->setFilesDispersion(false);
                // Set upload folder name to current date
                $currentTimestamp = Mage::getModel('core/date')->timestamp(time()); 
                $folder_name_date = date('Y_m_d', $currentTimestamp);
                // Create folder if not exsists
                $path = Mage::getBaseDir('media') . DS . 'uploads' . DS . $folder_name_date;
                if(!is_dir($path)){
                    mkdir($path, 0777, true);
                }
                // Image name
                $ext = pathinfo($_FILES[$key]['name'], PATHINFO_EXTENSION);
                $tmp = $imagename.'_'.$successCount.'_'.$time.'.'.$ext;
                // Save file
                $uploader->save($path, $tmp);             
                $newFilename = $uploader->getUploadedFileName();
                // Append to return
                $url = $mediaUrl.'uploads'.'/'.$folder_name_date.'/'.$tmp;
                $filenames[] = $url;
                $successCount++;
            } catch (Exception $e) {
                $message .= 'File upload error ';
            }
        }
        // Number of files uploaded correctly
        $message = $successCount . ' Files uploaded successfully';
    } else {
        $message .= 'File is not set properly ';
    }
    // Return json
    if($successCount>1) {
        echo $this->_uploadsJsonResponse($message,$filenames,'true');
    } else {
        echo $this->_uploadsJsonResponse($message,$filenames,'false');
    }
}

我没有太多的AJAX知识,所以不能正常工作。这是我的AJAX。我认为AJAX中的数据传递方法设置不正确。需要知道如何在数组中附加表单数据。

 var printImg  = canvas.toDataURL({
      format: 'png',
      multiplier: multi,
      left: (canvas.width - maskWidth)/2,
      height: maskOriHeight/multi,
      width: maskOriWidth/multi
    });
    var formdata = new FormData();
    formdata.append('imagename[]', printImg[0]);
    formdata.append('email', 'ex@gmail.com');
    $.ajax({
        type: "POST",
        //url: "upload.php",
        url: "http://example.com/api/index/uploadImg",
        //data: {image: printImg, email: email}
        data: formdata,
        processData: false,
        contentType: false

    })
        .done(function(respond) {
        console.log('saved'+respond); 
      });

我是怎么做到的?

您应该这样做:

            $.ajax({
                type: "POST",
                url: "/yourURL",    <---// "nameController/nameAction"
                data: data,
                dataType: 'html',
                success: function (result) {
                   alert("Your message sent!" + result);
                }
            });