কৌণিক ফাইল আপলোড


190

আমি কৌণিকের জন্য শিক্ষানবিশ, আমি কৌনিক 5 ফাইল আপলোড অংশটি কীভাবে তৈরি করব তা জানতে চাই , আমি কোনও টিউটোরিয়াল বা ডক সন্ধান করার চেষ্টা করছি, তবে আমি কোথাও কিছুই দেখতে পাচ্ছি না। এই জন্য কোন ধারণা? এবং আমি এনজি 4-ফাইল চেষ্টা করছি কিন্তু এটি কৌনিক 5 এর জন্য কাজ করছে না


2
সুতরাং আপনি কি টেনে আনুন এবং ছেড়ে দিন বা সাধারণ Choose Fileবিটিএন আপলোড চান? বিডিডাব্লু উভয় ক্ষেত্রেই আপনি কেবল ফর্মডাটা
ধইয়

4
প্রাইমং একবার দেখুন, আমি এটি কিছুক্ষণ ব্যবহার করছি এবং এটি কৌণিক ভি 5 এর সাথে কাজ করে। primefaces.org/primeng/#/fileupload
Bunyamin Coskuner

: যারা শুধু ক্লায়েন্ট তাদেরকে JSON আপলোড করতে হবে, এই প্রশ্ন খুঁজে বার করো stackoverflow.com/questions/54971238/...
AnthonyW

উত্তর:


422

এপিআই-তে ফাইল আপলোড করার জন্য এখানে একটি কার্যকারী উদাহরণ রয়েছে:

পদক্ষেপ 1: এইচটিএমএল টেমপ্লেট (ফাইল-আপলোড.কোমেনটি html)

প্রকারের সহজ ইনপুট ট্যাগটি সংজ্ঞায়িত করুন file(change)ফাইলগুলি বেছে নেওয়ার জন্য হস্তান্তর করার জন্য একটি ফাংশন যুক্ত করুন ।

<div class="form-group">
    <label for="file">Choose File</label>
    <input type="file"
           id="file"
           (change)="handleFileInput($event.target.files)">
</div>

পদক্ষেপ 2: টাইপস্ক্রিপ্টে হ্যান্ডলিং আপলোড করুন (file-upload.componal.ts)

নির্বাচিত ফাইলের জন্য একটি ডিফল্ট ভেরিয়েবল সংজ্ঞা দিন।

fileToUpload: File = null;

আপনি (change)নিজের ফাইল ইনপুট ট্যাগটি ব্যবহার করে যা ফাংশন তৈরি করুন :

handleFileInput(files: FileList) {
    this.fileToUpload = files.item(0);
}

আপনি যদি এই ফাইলগুলির অ্যারের মাধ্যমে পুনরাবৃত্তি করতে পারেন তবে আপনি যদি মাল্টিফাইল নির্বাচন পরিচালনা করতে চান।

এখন আপনাকে ফাইল-আপলোড.সর্বস্ব কল করে ফাইল আপলোড ফাংশন তৈরি করুন:

uploadFileToActivity() {
    this.fileUploadService.postFile(this.fileToUpload).subscribe(data => {
      // do something, if upload success
      }, error => {
        console.log(error);
      });
  }

পদক্ষেপ 3: ফাইল-আপলোড পরিষেবা (file-upload.service.ts)

POST- পদ্ধতির মাধ্যমে কোনও ফাইল আপলোড করে আপনার ব্যবহার করা উচিত FormData, কারণ আপনি http অনুরোধে ফাইল যুক্ত করতে পারেন।

postFile(fileToUpload: File): Observable<boolean> {
    const endpoint = 'your-destination-url';
    const formData: FormData = new FormData();
    formData.append('fileKey', fileToUpload, fileToUpload.name);
    return this.httpClient
      .post(endpoint, formData, { headers: yourHeadersConfig })
      .map(() => { return true; })
      .catch((e) => this.handleError(e));
}

সুতরাং, এটি খুব সাধারণ কাজের উদাহরণ, যা আমি আমার কাজে প্রতিদিন ব্যবহার করি।


6
@ কেটি আপনি পলিফিল সক্ষম করেছেন?
গ্রেগোর ডরোসচেঙ্কো

2
@ গ্রেগরডোরোসচেঙ্কো আমি ফাইল সম্পর্কে অতিরিক্ত তথ্য সহ একটি মডেল ব্যবহার করার চেষ্টা করছিলাম এবং এটি কাজ করতে আমাকে এটি করতে হয়েছিল: const invFormData: FormData = new FormData(); invFormData.append('invoiceAttachment', invoiceAttachment, invoiceAttachment.name); invFormData.append('invoiceInfo', JSON.stringify(invoiceInfo)); কন্ট্রোলারের দুটি অনুরূপ পরামিতি রয়েছে, তবে আমাকে কন্ট্রোলারে জেএসনকে পার্স করতে হয়েছিল। আমার কোর 2 নিয়ামক প্যারামিটারে স্বয়ংক্রিয়ভাবে মডেলটিকে পিকআপ করবেন না। আমার আসল নকশাটি একটি ফাইল সম্পত্তি সহ একটি মডেল ছিল, কিন্তু আমি এটি কাজ করতে পারি না
পাপা স্টাহল

1
@ গ্রেগরডোরোশেঙ্কো আমি এই কোডটি ব্যবহার করে createContrat(fileToUpload: File, newContrat: Contrat): Observable<boolean> { let headers = new Headers(); const endpoint = Api.getUrl(Api.URLS.createContrat)); const formData: FormData =new FormData(); formData.append('fileKey', fileToUpload, FileToUpload.name); let body newContrat.gup(this.auth.getCurrentUser().token); return this.http .post(endpoint, formData, body) .map(() => { return true; }) }
দেখেছি

1
@ গ্রেগরডোরোসচেঙ্কো এবং আমার জন্য কাজ করে না। আমি Content-Disposition: form-data; name="fileKey"; filename="file.docx" Content-Type: application/octet-stream <file>
ডাব্লুএসে

1
@ অन्नाব আপনি যদি ফাইলের জন্য এবং অন্যান্য বৈশিষ্ট্যের জন্য ফর্মড্যাটা ব্যবহার করছেন তবে আপনার ফাইল এবং অন্যান্য বৈশিষ্ট্যগুলি ফর্মডাটা হিসাবে পার্স করা উচিত। আপনি একই সাথে ফর্মডেটা এবং দেহ ব্যবহার করতে পারবেন না।
গ্রেগোর ডরোসচেঙ্কো

23

এইভাবে আমি প্রকল্পে ওয়েব এপিআইতে আপলোড ফাইলটি প্রয়োগ করি।

আমি যার জন্য উদ্বেগ শেয়ার করি।

const formData: FormData = new FormData();
formData.append('Image', image, image.name);
formData.append('ComponentId', componentId);
return this.http.post('/api/dashboard/UploadImage', formData);

ধাপে ধাপে

ASP.NET ওয়েব এপিআই

[HttpPost]
[Route("api/dashboard/UploadImage")]
public HttpResponseMessage UploadImage() 
{
    string imageName = null;
    var httpRequest = HttpContext.Current.Request;
    //Upload Image
    var postedFile = httpRequest.Files["Image"];
    //Create custom filename
    if (postedFile != null)
    {
        imageName = new String(Path.GetFileNameWithoutExtension(postedFile.FileName).Take(10).ToArray()).Replace(" ", "-");
        imageName = imageName + DateTime.Now.ToString("yymmssfff") + Path.GetExtension(postedFile.FileName);
        var filePath = HttpContext.Current.Server.MapPath("~/Images/" + imageName);
        postedFile.SaveAs(filePath);
    }
}

এইচটিএমএল ফর্ম

<form #imageForm=ngForm (ngSubmit)="OnSubmit(Image)">

    <img [src]="imageUrl" class="imgArea">
    <div class="image-upload">
        <label for="file-input">
            <img src="upload.jpg" />
        </label>

        <input id="file-input" #Image type="file" (change)="handleFileInput($event.target.files)" />
        <button type="submit" class="btn-large btn-submit" [disabled]="Image.value=='' || !imageForm.valid"><i
                class="material-icons">save</i></button>
    </div>
</form>

এপিআই ব্যবহারের জন্য টিএস ফাইল

OnSubmit(Image) {
    this.dashboardService.uploadImage(this.componentId, this.fileToUpload).subscribe(
      data => {
        console.log('done');
        Image.value = null;
        this.imageUrl = "/assets/img/logo.png";
      }
    );
  }

পরিষেবা টিএস

uploadImage(componentId, image) {
        const formData: FormData = new FormData();
        formData.append('Image', image, image.name);
        formData.append('ComponentId', componentId);
        return this.http.post('/api/dashboard/UploadImage', formData);
    }

1
আপনার উপায় কী হেডার পাঠায় না?
শালম দহন

14

খুব সহজ এবং দ্রুততম পদ্ধতিটি এনজি 2-ফাইল-আপলোড ব্যবহার করছে

এনপিএম-এর মাধ্যমে এনজি 2-ফাইল-আপলোড ইনস্টল করুন। npm i ng2-file-upload --save

আপনার মডিউলটিতে প্রথমে আমদানি করুন।

import { FileUploadModule } from 'ng2-file-upload';

Add it to [imports] under @NgModule:
imports: [ ... FileUploadModule, ... ]

মার্কআপ:

<input ng2FileSelect type="file" accept=".xml" [uploader]="uploader"/>

আপনার সংস্থার ts এ:

import { FileUploader } from 'ng2-file-upload';
...
uploader: FileUploader = new FileUploader({ url: "api/your_upload", removeAfterUpload: false, autoUpload: true });

এটি এর সহজ ব্যবহার। এর সমস্ত শক্তি জানতে ডেমোটি দেখুন


4
ছবি আপলোড করা হলে কীভাবে প্রতিক্রিয়া পাবেন? প্রতিক্রিয়া কী হবে, ডকুমেন্টেশনে এই অংশটি অনুপস্থিত।
মুহাম্মদ শাহজাদ

7

আমি কৌনিক 5.2.11 ব্যবহার করছি, গ্রেগোর ডোরোশেঙ্ককো প্রদত্ত সমাধানটি আমার পছন্দ হয়েছে তবে আমি লক্ষ্য করেছি যে আপলোড করা ফাইলটি শূন্য বাইটের, এটি আমার কাজ করার জন্য আমাকে একটি ছোট পরিবর্তন করতে হয়েছিল।

postFile(fileToUpload: File): Observable<boolean> {
  const endpoint = 'your-destination-url';
  return this.httpClient
    .post(endpoint, fileToUpload, { headers: yourHeadersConfig })
    .map(() => { return true; })
    .catch((e) => this.handleError(e));
}

নিম্নলিখিত লাইনগুলি (ফর্মডাটা) আমার পক্ষে কার্যকর হয়নি।

const formData: FormData = new FormData();
formData.append('fileKey', fileToUpload, fileToUpload.name);

https://github.com/amitrke/ngrke/blob/master/src/app/services/fileupload.service.ts


6

ঠিক আছে, গুগলের প্রথম ফলাফলগুলির মধ্যে যেমন এই থ্রেডটি উপস্থিত হয় এবং অন্যান্য ব্যবহারকারীদের একই প্রশ্ন রয়েছে, আপনাকে ট্রুবোডা দ্বারা চিহ্নিত হিসাবে চাকাটি পুনর্জীবিত করতে হবে না সেখানে এনজি 2-ফাইল-আপলোড লাইব্রেরি রয়েছে যা আপলোড করার এই প্রক্রিয়াটিকে সহজতর করে তোলে কৌনিক 6 এবং 7 সহ ফাইলটি আপনার যা করতে হবে তা হ'ল:

সর্বশেষতম কৌণিক সিএলআই ইনস্টল করুন

yarn add global @angular/cli

তারপরে সামঞ্জস্যতা উদ্বেগের জন্য rx-compat ইনস্টল করুন

npm install rxjs-compat --save

এনজি 2-ফাইল-আপলোড ইনস্টল করুন

npm install ng2-file-upload --save

আপনার মডিউলে ফাইলসিলিটডাইরেক্টিভ নির্দেশিকা আমদানি করুন।

import { FileSelectDirective } from 'ng2-file-upload';

Add it to [declarations] under @NgModule:
declarations: [ ... FileSelectDirective , ... ]

আপনার উপাদান

import { FileUploader } from 'ng2-file-upload/ng2-file-upload';
...

export class AppComponent implements OnInit {

   public uploader: FileUploader = new FileUploader({url: URL, itemAlias: 'photo'});
}

টেমপ্লেট

<input type="file" name="photo" ng2FileSelect [uploader]="uploader" />

আরও ভাল বোঝার জন্য আপনি এই লিঙ্কটি চেক করতে পারেন: কৌনিক 6/7 সহ একটি ফাইল কীভাবে আপলোড করবেন


1
লিঙ্কের জন্য ধন্যবাদ। ডেস্কটপে আপলোড করা দুর্দান্ত কাজ করে তবে আমি আমার জীবনের জন্য iOS এর মতো মোবাইল ডিভাইসে কাজ করতে আপলোডগুলি পেতে পারি না। আমি ক্যামেরা রোল থেকে একটি ফাইল নির্বাচন করতে পারি তবে আমি যখন এটি আপলোড করি তখন সর্বদা ব্যর্থ হয়। কোন ধারনা? এফওয়াইআই, ইনস্টল করা অ্যাপ্লিকেশনটিতে নয়, এটি মোবাইল সাফারিতে চালাচ্ছে।
স্কটএন

1
হাই @ স্কটএন এবং আপনার স্বাগত, সম্ভবত আপনি যে ব্রাউজারটি ব্যবহার করছেন তা থেকেই সমস্যাটি আসবে? আপনি এটি অন্য একটি দিয়ে পরীক্ষা করেছেন?
মোহাম্মদ মক্কাউই

1
হাই @ মোহাম্মদ মক্কাউই উত্তরের জন্য ধন্যবাদ। আমি এটি আইওএস-এ ক্রোমে চেষ্টা করেছি এবং এখনও একই ফলাফল। আমি কৌতূহল করছি যদি সার্ভারে পোস্ট করার সময় এটি একটি শিরোনাম সমস্যা হয়? আমি। নেট এবং অ্যাডাব্লুএস এফওয়াইআই-তে লিখিত একটি কাস্টম ওয়েবএপিআই ব্যবহার করছি।
স্কটএন

1
হাই @ স্কটএন আপনি এই লিঙ্কটি ডেভেলপার্স. google.com/web/tools/chrome-devtools/… ব্যবহার করে আপনার কোডটি ডিবাগ না করা এবং এটি কী ত্রুটি বার্তা পেয়েছেন তা না হওয়া পর্যন্ত আমরা এটি জানতে সক্ষম হব না issue
মোহাম্মদ মক্কাউই

6

ব্যক্তিগতভাবে আমি এই ব্যবহার করছি ngx-উপাদান ফাইল-ইনপুট ফ্রন্ট-এন্ড জন্য, এবং Firebase ব্যাক এন্ড জন্য। ক্লাউড ফায়ারস্টোরের সাথে মিলিত ব্যাক- এন্ডের জন্য ফায়ারবাজের জন্য আরও স্পষ্টভাবে সি লাউড স্টোরেজ । উদাহরণের নীচে, যা ফাইলটি ২০ এমবি থেকে বড় না হওয়ার সীমাবদ্ধ করে এবং কেবলমাত্র কিছু ফাইল এক্সটেনশান গ্রহণ করে। আমি ক্লাউড ফায়ারস্টোরও ব্যবহার করছি আপলোড হওয়া ফাইলগুলিতে লিঙ্কগুলি সংরক্ষণ করার জন্য , তবে আপনি এটি এড়িয়ে যেতে পারেন।

contact.component.html

<mat-form-field>
  <!--
    Accept only files in the following format: .doc, .docx, .jpg, .jpeg, .pdf, .png, .xls, .xlsx. However, this is easy to bypass, Cloud Storage rules has been set up on the back-end side.
  -->
  <ngx-mat-file-input
    [accept]="[
      '.doc',
      '.docx',
      '.jpg',
      '.jpeg',
      '.pdf',
      '.png',
      '.xls',
      '.xlsx'
    ]"
    (change)="uploadFile($event)"
    formControlName="fileUploader"
    multiple
    aria-label="Here you can add additional files about your project, which can be helpeful for us."
    placeholder="Additional files"
    title="Additional files"
    type="file"
  >
  </ngx-mat-file-input>
  <mat-icon matSuffix>folder</mat-icon>
  <mat-hint
    >Accepted formats: DOC, DOCX, JPG, JPEG, PDF, PNG, XLS and XLSX,
    maximum files upload size: 20 MB.
  </mat-hint>
  <!--
    Non-null assertion operators are required to let know the compiler that this value is not empty and exists.
  -->
  <mat-error
    *ngIf="contactForm.get('fileUploader')!.hasError('maxContentSize')"
  >
    This size is too large,
    <strong
      >maximum acceptable upload size is
      {{
        contactForm.get('fileUploader')?.getError('maxContentSize')
          .maxSize | byteFormat
      }}</strong
    >
    (uploaded size:
    {{
      contactForm.get('fileUploader')?.getError('maxContentSize')
        .actualSize | byteFormat
    }}).
  </mat-error>
</mat-form-field>

পরিচিতি.কম্পোনেন্ট.টস (আকার বৈধকারীর অংশ)

import { FileValidator } from 'ngx-material-file-input';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';

/**
 * @constructor
 * @description Creates a new instance of this component.
 * @param  {formBuilder} - an abstraction class object to create a form group control for the contact form.
 */
constructor(
  private angularFirestore: AngularFirestore,
  private angularFireStorage: AngularFireStorage,
  private formBuilder: FormBuilder
) {}

public maxFileSize = 20971520;
public contactForm: FormGroup = this.formBuilder.group({
    fileUploader: [
      '',
      Validators.compose([
        FileValidator.maxContentSize(this.maxFileSize),
        Validators.maxLength(512),
        Validators.minLength(2)
      ])
    ]
})

যোগাযোগ.componal.ts (ফাইল আপলোডকারী অংশ)

import { AngularFirestore } from '@angular/fire/firestore';
import {
  AngularFireStorage,
  AngularFireStorageReference,
  AngularFireUploadTask
} from '@angular/fire/storage';
import { catchError, finalize } from 'rxjs/operators';
import { throwError } from 'rxjs';

public downloadURL: string[] = [];
/**
* @description Upload additional files to Cloud Firestore and get URL to the files.
   * @param {event} - object of sent files.
   * @returns {void}
   */
  public uploadFile(event: any): void {
    // Iterate through all uploaded files.
    for (let i = 0; i < event.target.files.length; i++) {
      const randomId = Math.random()
        .toString(36)
        .substring(2); // Create random ID, so the same file names can be uploaded to Cloud Firestore.

      const file = event.target.files[i]; // Get each uploaded file.

      // Get file reference.
      const fileRef: AngularFireStorageReference = this.angularFireStorage.ref(
        randomId
      );

      // Create upload task.
      const task: AngularFireUploadTask = this.angularFireStorage.upload(
        randomId,
        file
      );

      // Upload file to Cloud Firestore.
      task
        .snapshotChanges()
        .pipe(
          finalize(() => {
            fileRef.getDownloadURL().subscribe((downloadURL: string) => {
              this.angularFirestore
                .collection(process.env.FIRESTORE_COLLECTION_FILES!) // Non-null assertion operator is required to let know the compiler that this value is not empty and exists.
                .add({ downloadURL: downloadURL });
              this.downloadURL.push(downloadURL);
            });
          }),
          catchError((error: any) => {
            return throwError(error);
          })
        )
        .subscribe();
    }
  }

storage.rules

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
        allow read; // Required in order to send this as attachment.
      // Allow write files Firebase Storage, only if:
      // 1) File is no more than 20MB
      // 2) Content type is in one of the following formats: .doc, .docx, .jpg, .jpeg, .pdf, .png, .xls, .xlsx.
      allow write: if request.resource.size <= 20 * 1024 * 1024
        && (request.resource.contentType.matches('application/msword')
        || request.resource.contentType.matches('application/vnd.openxmlformats-officedocument.wordprocessingml.document')
        || request.resource.contentType.matches('image/jpg')
        || request.resource.contentType.matches('image/jpeg')
        || request.resource.contentType.matches('application/pdf')
                || request.resource.contentType.matches('image/png')
        || request.resource.contentType.matches('application/vnd.ms-excel')
        || request.resource.contentType.matches('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'))
    }
  }
}

2
দেখতে দুর্দান্ত, তবে কেন আপনি toString()পরিচিতি ফারম ঘোষণার প্রয়োজন?
trungk18

1
@ ট্রুংকি 18 আবার এটি পরীক্ষা করে দেখুন এবং আপনি ঠিক উত্তরহীন toString(), আমার উত্তর সম্পাদনা করেছেন। যারা এই মন্তব্যটি পড়তে হবে শেষে জন্য fileUploadercontact.component.ts আমার কাছে তা থাকত ])].toString()})। এখন এটা কেবল দেওয়া হল: ])]})
ড্যানিয়েল ড্যানিয়েলেকি

5
  1. এইচটিএমএল

    <div class="form-group">
      <label for="file">Choose File</label><br /> <input type="file" id="file" (change)="uploadFiles($event.target.files)">
    </div>

    <button type="button" (click)="RequestUpload()">Ok</button>
  1. ts ফাইল
public formData = new FormData();
ReqJson: any = {};

uploadFiles( file ) {
        console.log( 'file', file )
        for ( let i = 0; i < file.length; i++ ) {
            this.formData.append( "file", file[i], file[i]['name'] );
        }
    }

RequestUpload() {
        this.ReqJson["patientId"] = "12"
        this.ReqJson["requesterName"] = "test1"
        this.ReqJson["requestDate"] = "1/1/2019"
        this.ReqJson["location"] = "INDIA"
        this.formData.append( 'Info', JSON.stringify( this.ReqJson ) )
            this.http.post( '/Request', this.formData )
                .subscribe(( ) => {                 
                });     
    }
  1. ব্যাকএন্ড স্প্রিং (জাভা ফাইল)

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class Request {
    private static String UPLOADED_FOLDER = "c://temp//";

    @PostMapping("/Request")
    @ResponseBody
    public String uploadFile(@RequestParam("file") MultipartFile file, @RequestParam("Info") String Info) {
        System.out.println("Json is" + Info);
        if (file.isEmpty()) {
            return "No file attached";
        }
        try {
            // Get the file and save it somewhere
            byte[] bytes = file.getBytes();
            Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
            Files.write(path, bytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "Succuss";
    }
}

আমাদের সি ড্রাইভে "টেম্পর" ফোল্ডার তৈরি করতে হবে, তারপরে এই কোডটি জসনকে কনসোলে মুদ্রণ করবে এবং তৈরি ফোল্ডারে আপলোড করা ফাইলটি সংরক্ষণ করবে


আমরা কীভাবে এই ফাইলটি পুনরুদ্ধার করব? আপনি কি এই সম্পর্কে কিছু গাইডেন্স আছে?
সিদ্ধার্থ চৌধুরী চৌদ্দ

এছাড়াও আমার বসন্তের সার্ভারটি ৮০৮০ এবং কৌণিকগুলি 000০০০-এ চলছে Now
সিদ্ধার্থ চৌধুরী চৌদ্দ

বাইট [] বাইটস = file.getBytes (); এটি বাইট স্ট্রিম দেবে..আপনি এটিকে ফাইলটিতে রূপান্তর করতে পারবেন, কর সমস্যার জন্য আপনি গুগলে সমাধান পেতে পারেন
শফিক মুহাম্মদ

5

প্রথমত, আপনার কৌণিক প্রকল্পে আপনাকে HTTPClient সেট আপ করতে হবে।

Src / app / app.module.ts ফাইলটি খুলুন, HttpClientModule আমদানি করুন এবং মডিউলটির আমদানি অ্যারেটিতে এটি যুক্ত করুন:

import { BrowserModule } from '@angular/platform-browser';  
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';  
import { AppComponent } from './app.component';  
import { HttpClientModule } from '@angular/common/http';

@NgModule({  
  declarations: [  
    AppComponent,  
  ],  
  imports: [  
    BrowserModule,  
    AppRoutingModule,  
    HttpClientModule  
  ],  
  providers: [],  
  bootstrap: [AppComponent]  
})  
export class AppModule { }

এর পরে, একটি উপাদান তৈরি করুন:

$ ng generate component home

এর পরে, একটি আপলোড পরিষেবা উত্পন্ন করুন:

$ ng generate service upload

এরপরে, src / app / upload.service.ts ফাইলটি নিম্নরূপ খুলুন:

import { HttpClient, HttpEvent, HttpErrorResponse, HttpEventType } from  '@angular/common/http';  
import { map } from  'rxjs/operators';

@Injectable({  
  providedIn: 'root'  
})  
export class UploadService { 
    SERVER_URL: string = "https://file.io/";  
    constructor(private httpClient: HttpClient) { }
    public upload(formData) {

      return this.httpClient.post<any>(this.SERVER_URL, formData, {  
         reportProgress: true,  
         observe: 'events'  
      });  
   }
}

এরপরে, src / app / home / home.component.ts ফাইলটি খুলুন এবং নিম্নলিখিত আমদানিগুলি যুক্ত করে শুরু করুন:

import { Component, OnInit, ViewChild, ElementRef  } from '@angular/core';
import { HttpEventType, HttpErrorResponse } from '@angular/common/http';
import { of } from 'rxjs';  
import { catchError, map } from 'rxjs/operators';  
import { UploadService } from  '../upload.service';

এরপরে, ফাইল আপলোড এবং ফাইলগুলি ভেরিয়েবল সংজ্ঞায়িত করুন এবং আপলোড সার্ভিসটি নীচে ইনজেক্ট করুন:

@Component({  
  selector: 'app-home',  
  templateUrl: './home.component.html',  
  styleUrls: ['./home.component.css']  
})  
export class HomeComponent implements OnInit {
    @ViewChild("fileUpload", {static: false}) fileUpload: ElementRef;files  = [];  
    constructor(private uploadService: UploadService) { }

এরপরে, আপলোড ফাইল () পদ্ধতিটি সংজ্ঞায়িত করুন:

uploadFile(file) {  
    const formData = new FormData();  
    formData.append('file', file.data);  
    file.inProgress = true;  
    this.uploadService.upload(formData).pipe(  
      map(event => {  
        switch (event.type) {  
          case HttpEventType.UploadProgress:  
            file.progress = Math.round(event.loaded * 100 / event.total);  
            break;  
          case HttpEventType.Response:  
            return event;  
        }  
      }),  
      catchError((error: HttpErrorResponse) => {  
        file.inProgress = false;  
        return of(`${file.data.name} upload failed.`);  
      })).subscribe((event: any) => {  
        if (typeof (event) === 'object') {  
          console.log(event.body);  
        }  
      });  
  }

এরপরে, আপলোডফাইल्स () পদ্ধতিটি সংজ্ঞায়িত করুন যা একাধিক চিত্র ফাইলগুলি আপলোড করতে ব্যবহৃত হতে পারে:

private uploadFiles() {  
    this.fileUpload.nativeElement.value = '';  
    this.files.forEach(file => {  
      this.uploadFile(file);  
    });  
}

এরপরে, অনক্লিক () পদ্ধতিটি সংজ্ঞায়িত করুন:

onClick() {  
    const fileUpload = this.fileUpload.nativeElement;fileUpload.onchange = () => {  
    for (let index = 0; index < fileUpload.files.length; index++)  
    {  
     const file = fileUpload.files[index];  
     this.files.push({ data: file, inProgress: false, progress: 0});  
    }  
      this.uploadFiles();  
    };  
    fileUpload.click();  
}

এর পরে, আমাদের ইমেজ আপলোড ইউআইএইচটিএমএল টেমপ্লেট তৈরি করতে হবে। Src / app / home / home.componal.html ফাইলটি খুলুন এবং নিম্নলিখিত সামগ্রীটি যুক্ত করুন:

       <div style="text-align:center; margin-top: 100px; ">

        <button mat-button color="warn" (click)="onClick()">  
            Upload  
        </button>  
    <input type="file" #fileUpload id="fileUpload" name="fileUpload" multiple="multiple" accept="image/*" style="display:none;" /></div>

এই টিউটোরিয়াল এবং এই পোস্টটি দেখুন


4

কৌণিক এবং নোডেজ (এক্সপ্রেস) ব্যবহার করে ফাইল আপলোডের সম্পূর্ণ উদাহরণ

এইচটিএমএল কোড

            <div class="form-group">
                <label for="file">Choose File</label><br/>
                <input type="file" id="file" (change)="uploadFile($event.target.files)" multiple>
            </div>

টিএস কম্পোনেন্ট কোড

uploadFile(files) {
    console.log('files', files)
        var formData = new FormData();

    for(let i =0; i < files.length; i++){
      formData.append("files", files[i], files[i]['name']);
        }

    this.httpService.httpPost('/fileUpload', formData)
      .subscribe((response) => {
        console.log('response', response)
      },
        (error) => {
      console.log('error in fileupload', error)
       })
  }

নোড জেএস কোড

ফাইলআপলোড API কন্ট্রোলার

function start(req, res) {
fileUploadService.fileUpload(req, res)
    .then(fileUploadServiceResponse => {
        res.status(200).send(fileUploadServiceResponse)
    })
    .catch(error => {
        res.status(400).send(error)
    })
}

module.exports.start = start

মাল্টার ব্যবহার করে পরিষেবা আপলোড করুন

const multer = require('multer') // import library
const moment = require('moment')
const q = require('q')
const _ = require('underscore')
const fs = require('fs')
const dir = './public'

/** Store file on local folder */
let storage = multer.diskStorage({
destination: function (req, file, cb) {
    cb(null, 'public')
},
filename: function (req, file, cb) {
    let date = moment(moment.now()).format('YYYYMMDDHHMMSS')
    cb(null, date + '_' + file.originalname.replace(/-/g, '_').replace(/ /g,     '_'))
}
})

/** Upload files  */
let upload = multer({ storage: storage }).array('files')

/** Exports fileUpload function */
module.exports = {
fileUpload: function (req, res) {
    let deferred = q.defer()

    /** Create dir if not exist */
    if (!fs.existsSync(dir)) {
        fs.mkdirSync(dir)
        console.log(`\n\n ${dir} dose not exist, hence created \n\n`)
    }

    upload(req, res, function (err) {
        if (req && (_.isEmpty(req.files))) {
            deferred.resolve({ status: 200, message: 'File not attached', data: [] })
        } else {
            if (err) {
                deferred.reject({ status: 400, message: 'error', data: err })
            } else {
                deferred.resolve({
                    status: 200,
                    message: 'File attached',
                    filename: _.pluck(req.files,
                        'filename'),
                    data: req.files
                })
            }
        }
    })
    return deferred.promise
}
}

1
কোথা থেকে এইচপিএস সার্ভিস আসে?
জেমস

@ জেমস HTTP পরিষেবা সার্ভারে HTTP কল করার জন্য কৌণিকের HT মডিউল। আপনি চাইলে যে কোনও HTTP পরিষেবা ব্যবহার করতে পারেন imp
রোহিত পার্ট

2

এটা চেষ্টা কর

ইনস্টল করুন

npm install primeng --save

আমদানি

import {FileUploadModule} from 'primeng/primeng';

এইচটিএমএল

<p-fileUpload name="myfile[]" url="./upload.php" multiple="multiple"
    accept="image/*" auto="auto"></p-fileUpload>

1
আমি উপরের উদাহরণ ব্যবহার করে ক্লান্ত। তবে আমি। / Upload.php পাইনি।
সন্দীপ কামথ

2
আপনার URL টি যেখানে এটি পরিবর্তে upload.php @sandeep kamath এর লোড করা উচিত প্রদান করা উচিত
Vignesh

1
@ উত্তর আপনার উত্তর জন্য ধন্যবাদ। তবে আমি দেখতে পেয়েছি যে আমি ফাইলটি লোড করার পরেও url বৈশিষ্ট্যটি দেই না, এটি ডিফল্ট হওয়া উচিত।
সন্দীপ কামাথ

1
আপনি কি দয়া করে ব্যাখ্যা করতে পারেন যে আমরা যদি এই পদ্ধতিতে করি তবে কীভাবে আমরা পিএইচপি তে ফাইলটি পেতে পারি।
শায়খ আরবাজ

2

ইন কৌণিক 7/8/9

উত্স লিঙ্ক

এখানে চিত্র বর্ণনা লিখুন

বুটস্ট্র্যাপ ফর্ম ব্যবহার করা

<form>
    <div class="form-group">
        <fieldset class="form-group">

            <label>Upload Logo</label>
            {{imageError}}
            <div class="custom-file fileInputProfileWrap">
                <input type="file" (change)="fileChangeEvent($event)" class="fileInputProfile">
                <div class="img-space">

                    <ng-container *ngIf="isImageSaved; else elseTemplate">
                        <img [src]="cardImageBase64" />
                    </ng-container>
                    <ng-template #elseTemplate>

                        <img src="./../../assets/placeholder.png" class="img-responsive">
                    </ng-template>

                </div>

            </div>
        </fieldset>
    </div>
    <a class="btn btn-danger" (click)="removeImage()" *ngIf="isImageSaved">Remove</a>
</form>

ইন কম্পোনেন্ট ক্লাস

fileChangeEvent(fileInput: any) {
    this.imageError = null;
    if (fileInput.target.files && fileInput.target.files[0]) {
        // Size Filter Bytes
        const max_size = 20971520;
        const allowed_types = ['image/png', 'image/jpeg'];
        const max_height = 15200;
        const max_width = 25600;

        if (fileInput.target.files[0].size > max_size) {
            this.imageError =
                'Maximum size allowed is ' + max_size / 1000 + 'Mb';

            return false;
        }

        if (!_.includes(allowed_types, fileInput.target.files[0].type)) {
            this.imageError = 'Only Images are allowed ( JPG | PNG )';
            return false;
        }
        const reader = new FileReader();
        reader.onload = (e: any) => {
            const image = new Image();
            image.src = e.target.result;
            image.onload = rs => {
                const img_height = rs.currentTarget['height'];
                const img_width = rs.currentTarget['width'];

                console.log(img_height, img_width);


                if (img_height > max_height && img_width > max_width) {
                    this.imageError =
                        'Maximum dimentions allowed ' +
                        max_height +
                        '*' +
                        max_width +
                        'px';
                    return false;
                } else {
                    const imgBase64Path = e.target.result;
                    this.cardImageBase64 = imgBase64Path;
                    this.isImageSaved = true;
                    // this.previewImagePath = imgBase64Path;
                }
            };
        };

        reader.readAsDataURL(fileInput.target.files[0]);
    }
}

removeImage() {
    this.cardImageBase64 = null;
    this.isImageSaved = false;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.