ফর্ম ছাড়াই ফাইল আপলোড


96

যাইহোক কোনও ফর্ম ব্যবহার না করে, আমি কেবল <input type="file">jQuery ব্যবহার করে POST পদ্ধতি ব্যবহার করে 'আপলোড.এফপি' থেকে কোনও ফাইল / ফাইল পাঠাতে পারি । ইনপুট ট্যাগ কোনও ফর্ম ট্যাগের মধ্যে নেই। এটি পৃথকভাবে দাঁড়িয়ে। সুতরাং আমি 'অ্যাজ্যাক্সফর্ম' বা 'আজাক্স সাবমিট' এর মতো jQuery প্লাগইন ব্যবহার করতে চাই না।


4
এটি চেষ্টা করুন: uploadify.com তবে ফ্ল্যাশ সংস্করণ ব্যবহার করুন। আসুন, আপনার শিলা নিক্ষেপ। আমি নিশ্চিত না যে এইচটিএমএল 5 সংস্করণটি কোনও ফর্ম ছাড়া কাজ করে কিনা। সম্ভবত হবে, তবে আমি নিশ্চিত নই।
ইসমাইল মিগুয়েল

4
আরআর .... আমি বলতে চাই এটি এটি এইচটিএমএল 5 এ কাজ করা উচিত But কোনও ফর্ম তৈরি করতে, বা গতিশীলভাবে নেটার্স থেকে কোনও ফর্ম তৈরির ক্ষতি কী?
যিটজাক

উত্তর:


97

আপনি কোনও পোষ্ট অনুরোধের মাধ্যমে আপনার ডেটা জমা দেওয়ার জন্য ফর্মডাটা ব্যবহার করতে পারেন । এখানে একটি সহজ উদাহরণ:

var myFormData = new FormData();
myFormData.append('pictureFile', pictureInput.files[0]);

$.ajax({
  url: 'upload.php',
  type: 'POST',
  processData: false, // important
  contentType: false, // important
  dataType : 'json',
  data: myFormData
});

এজ্যাক্স অনুরোধ করার জন্য আপনাকে কোনও ফর্ম ব্যবহার করতে হবে না, যতক্ষণ না আপনি নিজের অনুরোধ সেটিংটি জানেন (যেমন ইউআরএল, পদ্ধতি এবং প্যারামিটার ডেটা)।


আইএমএইচও এটিই সেরা সমাধান, তবে আরেকটি পছন্দ হ'ল <iframe এর ভিতরে আপনি নিয়মিত পোস্ট করতে পারেন
জন স্মিথ

হ্যা, এটা সত্য. পুরানো ব্রাউজারগুলি ফাইলগুলি আপলোড করতে ফর্মডাটা এবং এজাক্স সমর্থন করে না এবং যদি সেই ব্রাউজারগুলিতে ফালব্যাক হিসাবে iframe ব্যবহার করা হয় তবে সমাধানটি সমাধান করে না।
ওমিদ মংশিদেহে

7
সেটিংসের অবজেক্টটি যুক্ত করতে processData: falseএবং ভুলতে ভুলবেন না contentType: falseঅন্যথায় আপনি আনকড টাইপ এরিয়ার পাবেন: অবৈধ অনুরোধ
jsmiff

4
বন্ধুরা, আপনি আমার জীবন বাঁচিয়েছেন !! : ডি আপনাকে ধন্যবাদ @ মোমশি এবং @ জেসমিফ। (এসওএফ একই মন্তব্যে একাধিক ব্যবহারকারীকে অস্বীকার করবে)।
সিলভিও দেলগাদো

4
ছবি ইনপুট কি এই ??
বিকাশকারীরা

34

এখানে সমস্ত উত্তর এখনও ফর্মডেটা এপিআই ব্যবহার করছে । "multipart/form-data"এটি কোনও ফর্ম ছাড়াই আপলোডের মতো । আপনি POSTঅনুরোধের বুকের অভ্যন্তরের সামগ্রী হিসাবে ফাইলটি সরাসরি আপলোড করতে পারেন xmlHttpRequest:

var xmlHttpRequest = new XMLHttpRequest();

var file = ...file handle...
var fileName = ...file name...
var target = ...target...
var mimeType = ...mime type...

xmlHttpRequest.open('POST', target, true);
xmlHttpRequest.setRequestHeader('Content-Type', mimeType);
xmlHttpRequest.setRequestHeader('Content-Disposition', 'attachment; filename="' + fileName + '"');
xmlHttpRequest.send(file);

Content-Typeএবং Content-Dispositionশিরোনামগুলি আমরা কী পাঠাচ্ছি তা বোঝাতে (মাইম-টাইপ এবং ফাইলের নাম) ব্যবহার করা হয়।

আমি এখানেও অনুরূপ উত্তর পোস্ট করেছি ।


4
এটি দুর্দান্ত উত্তর। এটি ফর্ম ডেটার ব্যবহার সম্পূর্ণভাবে এড়িয়ে চলেছে। আমি এক্সএমএলএইচটিপিআরকোয়েস্টের ব্যবহারে আরও কিছু যোগ করতে পারি। একটি এক্সএমএলএইচটিপিআরকোয়েস্ট অ্যাসিক্রোনাস ক্রিয়াকলাপ সম্পাদনের অনুমতি দেয় যা ক্লায়েন্টকে (ইউআই পৃষ্ঠা) অবরুদ্ধ করে না। এইচটিএমএল ফর্ম ব্যবহার করার সময়, ক্রিয়াকলাপটি চলাকালীন ক্লায়েন্ট (ইউআই পৃষ্ঠা) অবরুদ্ধ করা আছে।
হ্যারি


@ ভিটালিজেডনেভিচ আপনি নিশ্চিত না যে এর অর্থ কী?
উইল্ট করুন

13

এই টিউটোরিয়ালের উপর ঝাঁকুনি, এটি করার একটি খুব প্রাথমিক উপায়:

$('your_trigger_element_selector').on('click', function(){    
    var data = new FormData();
    data.append('input_file_name', $('your_file_input_selector').prop('files')[0]);
    // append other variables to data if you want: data.append('field_name_x', field_value_x);

    $.ajax({
        type: 'POST',               
        processData: false, // important
        contentType: false, // important
        data: data,
        url: your_ajax_path,
        dataType : 'json',  
        // in PHP you can call and process file in the same way as if it was submitted from a form:
        // $_FILES['input_file_name']
        success: function(jsonData){
            ...
        }
        ...
    }); 
});

সঠিক ত্রুটি হ্যান্ডলিং যুক্ত করতে ভুলবেন না


11

পদক্ষেপ 1: এইচটিএমএল কোডটি কোথায় রাখবেন এইচটিএমএল পৃষ্ঠা তৈরি করুন।

পদক্ষেপ 2: এইচটিএমএল কোড পৃষ্ঠায় নীচে (পাদচরণ) জাভাস্ক্রিপ্ট তৈরি করুন: এবং স্ক্রিপ্ট ট্যাগে জ্যাকারি কোড রাখুন।

পদক্ষেপ 3: পিএইচপি ফাইল এবং পিএইচপি কোড অনুলিপি তৈরি করুন। $.ajaxকোড url এ Jquery কোড পরে আপনার পিএইচপি ফাইলের নামটি প্রয়োগ করে name

জেএস

//$(document).on("change", "#avatar", function() {   // If you want to upload without a submit button 
$(document).on("click", "#upload", function() {
  var file_data = $("#avatar").prop("files")[0]; // Getting the properties of file from file field
  var form_data = new FormData(); // Creating object of FormData class
  form_data.append("file", file_data) // Appending parameter named file with properties of file_field to form_data
  form_data.append("user_id", 123) // Adding extra parameters to form_data
  $.ajax({
    url: "/upload_avatar", // Upload Script
    dataType: 'script',
    cache: false,
    contentType: false,
    processData: false,
    data: form_data, // Setting the data attribute of ajax with file_data
    type: 'post',
    success: function(data) {
      // Do something after Ajax completes 
    }
  });
});

এইচটিএমএল

<input id="avatar" type="file" name="avatar" />
<button id="upload" value="Upload" />

পিএইচপি

print_r($_FILES);
print_r($_POST);

4
দয়া করে, আপনার কোডের জন্য কিছু মন্তব্য / বর্ণনা যুক্ত করুন
1915

এর ,পরে একটি অনুপস্থিতtype: 'post'
गोलসএন্ডজ্যাম্বলস

4
আমার দিনটি তৈরি করেছে :) ধন্যবাদ
শেখার্ত্তু

tmpপুরো ফর্মটি জমা না দেওয়া পর্যন্ত আপনি কোনও ডিরেক্টরিতে একটি ফাইল আপলোড করতে পারেন ? (বলুন এটি একটি বহু-রূপ ছিল)?
থিসেহে

আমি জাভা কোডে এই ফর্মগুলির পরিবর্তনশীলগুলি কীভাবে উল্লেখ করব
ভাস্কারা আরানী

1

এই পগলিন সিম্পল আপলোড চেষ্টা করুন , কোনও ফর্মের প্রয়োজন নেই

এইচটিএমএল:

<input type="file" name="arquivo" id="simpleUpload" multiple >
<button type="button" id="enviar">Enviar</button>

জাভাস্ক্রিপ্ট:

$('#simpleUpload').simpleUpload({
  url: 'upload.php',
  trigger: '#enviar',
  success: function(data){
    alert('Envio com sucesso');

  }
});

1

লোকটি হওয়ার জন্য দুঃখিত তবে অ্যাঙ্গুলারজেএস একটি সহজ এবং মার্জিত সমাধান দেয়।

আমি যে কোডটি ব্যবহার করি তা এখানে:

ngApp.controller('ngController', ['$upload',
function($upload) {

  $scope.Upload = function($files, index) {
    for (var i = 0; i < $files.length; i++) {
      var file = $files[i];
      $scope.upload = $upload.upload({
        file: file,
        url: '/File/Upload',
        data: {
          id: 1 //some data you want to send along with the file,
          name: 'ABC' //some data you want to send along with the file,
        },

      }).progress(function(evt) {

      }).success(function(data, status, headers, config) {
          alert('Upload done');
        }
      })
    .error(function(message) {
      alert('Upload failed');
    });
  }
};
}]);
.Hidden {
  display: none
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div data-ng-controller="ngController">
  <input type="button" value="Browse" onclick="$(this).next().click();" />
  <input type="file" ng-file-select="Upload($files, 1)" class="Hidden" />
</div>

সার্ভারের পাশে আমার কাছে একটি অ্যাকশন সহ এমভিসি কন্ট্রোলার রয়েছে যা অনুরোধ.ফাইলেস সংগ্রহে পাওয়া ফাইলগুলি সংরক্ষণ করে এবং একটি জসনআরসাল্ট ফিরিয়ে দেয়।

আপনি যদি AngularJS ব্যবহার করেন তবে এটি চেষ্টা করে দেখুন, দুঃখিত না হলে সাথী :-)


ডাউনটোটেড কারণ $ আপলোডের নির্দেশিকার সাথে কাজ করে না
নিকো জুইসিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.