Опубликовать файл Excel / API Blob to Rest с помощью Angular 4

Этот ответ во многом посвящен комментарию, сделанному @ RafałDowgird:

«Минимальный размер операций - это int». - Это было бы очень странно (что относительно архитектур, которые эффективно поддерживают char / короткие операции?) Действительно ли это в спецификации C ++?

Имейте в виду, что стандарт C ++ имеет важное значение правило «как-если». См. Раздел 1.8: Исполнение программы:

3) Это положение иногда называют правилом «как есть», поскольку реализация может игнорировать любое требование Стандарта, пока результат как если бы это требование выполнялось, насколько это можно определить из наблюдаемого поведения программы.

Компилятор не может установить int размером 8 бит, даже если он был самым быстрым, так как стандарт предусматривает 16-битный минимум int.

Поэтому, в случае теоретического компьютера с супербыстрого 8-битными операциями, неявное продвижение к int для арифметики может иметь значение. Однако для многих операций вы не можете определить, действительно ли компилятор выполнял операции с точностью int, а затем преобразовывался в char для хранения в вашей переменной или если операции выполнялись в символе все время.

Например, рассмотрим unsigned char = unsigned char + unsigned char + unsigned char, где добавление будет переполняться (допустим, значение 200 для каждого). Если вы повысились до int, вы получите 600, которые затем будут неявно сбрасываться в unsigned char, который будет обертывать по модулю 256, таким образом давая окончательный результат 88. Если вы не делали таких рекламных акций, вы бы необходимо обернуть между двумя первыми дополнениями, что уменьшит проблему с 200 + 200 + 200 до 144 + 200, что составляет 344, что уменьшится до 88. Другими словами, программа не знает разницы, поэтому компилятор свободен для игнорировать мандат на выполнение промежуточных операций в int, если операнды имеют более низкий рейтинг, чем int.

Это в целом относится к сложениям, вычитанию и умножению. Это не верно в общем случае для деления или модуля.

0
задан rtvalluri 22 January 2019 в 08:39
поделиться

1 ответ

Наконец-то нашли решение

Шаблон:

<input type="file" [multiple]="multiple" #fileInput class="browse-btn" (change)="readFile()" accept=".xlsx">
<button type="button" class="btn btn-info btn-lg" (click)="upload()" >Upload</button>

Компонент:

public upload() {
    const inputEl: HTMLInputElement = this.inputEl.nativeElement;
    const fileCount: number = inputEl.files.length;
    const formData = new FormData();
    const headers = new Headers();
    headers.set('Accept', 'application/json');
    headers.delete('Content-Type'); // mandate for accepting binary content
    if (fileCount > 0) {
        for (let i = 0; i < fileCount; i++) {
            formData.append('file', inputEl.files.item(i));
        }
        try {
            this.loaderForFileUpload = true;
            this.http
                .post('http://urlForFileUpload', formData, { headers: headers })
                .subscribe(response => {
                    if (response.status === 200) {
                        this._toastr.success('File uploaded successfully', 'Success!');
                    }
                }, error => {
                    this._toastr.error('File contents mismatch', error.statusText);
                });
        } catch (e) {
            console.log('Error occured while posting uploaded file. See below message for details : \n');
            console.log(e);
        }
    }
}
0
ответ дан rtvalluri 22 January 2019 в 08:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: