Angular 13: How to Handle an Empty FormData Object When Uploading Multiple Images

I attempted to upload multiple images using "angular 13", but I'm unable to retrieve the uploaded file in the payload. The formData appears empty in the console.

Any suggestions on how to resolve this issue?

Here is the HTML code:

 <form [formGroup]="myForm" (ngSubmit)="submit()">
    <div class="form-group">
        <label for="file">File</label>
        <input id="file" type="file" multiple class="form-control" (change)="onFileChange($event)">
        <div *ngIf="f.file.touched && f.file.invalid" class="alert alert-danger">
            <div *ngIf="f.file.errors && f.file.errors.required">File is required.</div>
        </div>
    </div>
    <button class="btn btn-primary" type="submit">Submit</button>
</form>    

gallery.ts

   onFileChange(event: any) {
    if (event.target.files.length > 0) {
      for (var i = 0; i < (event.target.files.length); i++) {
        this.myFiles.push(event.target.files[i]);
        this.myForm.get('file')?.setValue(this.myFiles);
        console.log('my files check', this.myFiles);
      }
    }
  }   


submit() {
let id = localStorage.getItem('uid');
const formData = new FormData();
for (var i = 0; i < this.myFiles.length; i++) {
  formData.append("file[]", this.myFiles[i]);
}
let payload = {
  'url': '/api/uploadgallery',
  'formData': formData,
  'id': id,
}
console.log('form data check', payload);
this.playerService.postFilegallery(payload).subscribe((response: any) => {
  console.log('resonsecheck', response);
});    

Service.ts

    postFilegallery(sendData: any) {
    console.log('send data check',sendData);
    let headers = {
      'Accept': 'multipart/form-data'     
    };
    return this.http.post(API_URL + sendData.url, sendData, { headers: headers })
      .pipe(map(res => {
        res
        alert('Uploaded Successfully.');
      }));
  }    

https://i.sstatic.net/dYnF1.png

Answer №1

I can't pinpoint the reason why the formData property is blank, but it seems like you have incorrectly assigned the multipart/form-data value to the header. Instead of using 'Accept': 'multipart/form-data', try switching it to

'Content-Type': 'multipart/form-data'

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Error message: An unhandled TypeError occurs when attempting to access properties of an undefined object (specifically, the 'then' property) while refreshing the token using axios

Is there a way to refresh tokens in axios without interrupting the flow? For example, when the server returns an access token expiration error, I want to queue the request and replay it after getting a new token. In React, I'm using promises as shown ...

What is the best approach to dynamically update CSS using onChange in TypeScript?

I am facing an issue with 2 input fields on my website. I want to create a functionality where if a user enters data into one field, the CSS of the other field changes dynamically. For instance, I would like to change the class "changeAmount" to "display:n ...

"Implementing a date picker in your Ionic 5 app: A step-by-step

How can I integrate a date picker similar to the Angular Material Date picker into my Ionic 5 application? I prefer not to use the native ion-datetime component due to limitations such as incomplete calendar display and lack of support for alternative ca ...

What is the best approach to implement a recursive intersection while keeping refactoring in consideration?

I'm currently in the process of refactoring this code snippet to allow for the reuse of the same middleware logic on multiple pages in a type-safe manner. However, I am encountering difficulties when trying to write a typesafe recursive type that can ...

Transforming a mongodb operation into an asynchronous function using await and async syntax

After calling the function to retrieve data from MongoDB, an undefined error occurs. It is suspected that converting the function to an async/await function may resolve this issue. However, there is uncertainty on how to make this conversion without disrup ...

Tips for syncing the state data stored in local storage across all tabs with Ngxs state management

After converting the state data to base64 format using the Ngxs state management library, I am saving it. While I can retrieve all data across different tabs, any changes made in one tab do not automatically sync with other tabs. A tab refresh is required ...

Using a React component with Material-UI style classes in TypeScript is not possible

Recently delving into react, I've embarked on a learning project utilizing typescript 3.7.2 alongside material-ui 4.11.0 and react 16.13.1. Initially, I structured my page layouts using functional components, but upon attempting to switch them to clas ...

In the past, my code would run smoothly without any issues, but now I am encountering a runtime error even though the code comp

Recently, I started learning TypeScript and encountered an issue while working with Classes. My code was functioning properly before but now it's displaying a runtime error. ...

Identified the category

How can I retrieve the default option from a list of options? type export type Unpacked<T> = T extends Array<infer U> ? U : T; interface getDefaultValue?: <T extends Option[]>(options: T) => Unpacked<T>; Example const options = ...

Encountering difficulties compiling Angular project

Error : PS C:\toolbox\intern-page> tsc C:\toolbox\intern-page\src\app\homepage\homepage.component.ts node_modules/@types/core-js/index.d.ts:829:20 - error TS2304: 'PromiseConstructor' cannot be foun ...

Managing DOM elements within a Vue 3 template using Typescript

As I delve into the world of Vue 3 as a beginner, I encountered a challenge when it came to managing the DOM within Vue 3 templates. Let's take a look at the source code. MainContainer.vue <template> <div class="main-container" r ...

What benefits do declaration files offer compared to sources in TypeScript?

When developing and releasing a library using TypeScript, there are 2 approaches: One option is to generate declaration files d.ts along with the bundled JavaScript file and then specify it in package.json with: "types": "./dist/mylib.d.ts" Alternativel ...

Create a typescript class object

My journey with Typescript is just beginning as I delve into using it alongside Ionic. Coming from a background in Java, I'm finding the syntax and approach quite different and challenging. One area that's giving me trouble is creating new object ...

Does Typescript not provide typecasting for webviews?

Typescript in my project does not recognize webviews. An example is: const webview = <webview> document.getElementById("foo"); An error is thrown saying "cannot find name 'webview'". How can I fix this issue? It works fine with just javas ...

The "tsc" command in Typescript seems to be acting up. I've exhausted all possible solutions but

Hello there, I find myself struggling to run Typescript throughout the day while utilizing Visual Studio Code. My usual method involves installing TS globally: $ npm install -g typescript But every time I try to use it, I encounter the same error: bas ...

When attempting to set a variable type using ":URL", an error is generated

When I created a file named "test.ts" in VSCode, I included the following code: var data = "https://a.b.c/d/e/f"; var url = new URL(data); console.log(url.protocol); After pressing F5, the output was "https:". However, when I added a type declaration like ...

Angular2 ngFor, encountering undefined property

Having an issue where one of my properties is showing as "undefined" even though it is defined. Can't seem to find a solution: I have a parent component with the following data: @Component({ selector: "app-my-products", templateUrl: ...

Unable to refresh the context following a successful API call

My current project in NextJS requires a simple login function, and I have been attempting to implement it using the Context API to store user data. However, I am facing an issue where the context is not updating properly after fetching data from the back-e ...

Angular2 allows for the firing of all columns in one click using *ngFor

<tr *ngFor = 'let student of students> <td contenteditable="true" class ='phone' #button> {{student.phone}} <i (click)='showbox()' class = ' glyphicon glyphicon-edit'></i> <input *ngIf=&apo ...

Tips for customizing Material UI's styled() SVG icon to accept SVG icon as a react component:

Currently, I have functioning code that uses the "any" type for props. When transitioning to MUI v5 and using the mui v4 makeStyles, this approach raises compatibility issues that were not present before. // Import SVG Icons components import { ReactCo ...