又拍云存储 - 我能通过Angular.JS来使用表单提交API吗
高洛峰
高洛峰 2017-05-15 16:49:07
0
4
622

现有的业务完全使用了前端Angular.JS的单页应用,所有请求均通过ajax发出。

现在我想实现在客户端直接向又拍云上传文件,尝试了angular file upload,但是提交的结果是

400: not accept, miss signature

抓包得知,policy和signature的表单数据根本没有提交。
我是这样写的:

    $scope.onFileSelect = function ($files) {
        var file = $files[0]; //这里我只传单个文件
        $scope.upload = $upload.upload({
            url: 'http://v0.api.upyun.com/youguess',
            method: 'POST',
            headers: {'Content-Type': 'multipart/form-data'},
            data: {
                signature: 'youguess',
                policy: 'youguess'
            },
            fileFormDataName: 'file',
            file: file,
            formDataAppender: function (formData, key, value) {
                if (angular.isArray(value)) {
                    angular.forEach(value, function(v) {
                        formData.append(key, v);
                    });
                } else {
                    formData.append(key, value);
                }
            }
        }).progress(function (event) {
            console.log(parseInt(100.0 * event.loaded / event.total));
        }).success(function (data, status, headers, config) {
            console.log(data);
        });
    };

我参考了这个github项目的这个和这个issues

what should I do?

我同时还有两个疑问:

  1. signature我可以直接md5加密好写上,这个md5直接写在客户端是否有安全问题?
  2. policy能不能在js中base64编码生成,因为我看官方给的demo是在php内生成的。如果可以在前端生成,把这个过程写在前端是否也会引发安全问题?
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(4)
世界只因有你

Merujuk isu ini
Selagi isu keselamatan tandatangan diselesaikan, fail boleh dimuat naik dengan jayanya. Terima kasih semua.

Penyelesaian:

  • Alih keluar pengepala
  • Alih keluar formDataAppender
为情所困

hai Biar saya jawab dua soalan anda yang seterusnya dahulu:

    Tandatangan
  • tandatangan termasuk form_api_secret, jadi jika anda menulisnya terus di bahagian hadapan, memang akan ada isu keselamatan: jika orang lain mendapat form_api_secret anda, mereka boleh menulis borang mereka sendiri dan menyerahkan fail ke ruang anda dan menggunakan trafik anda.

  • dasar boleh dijana pada bahagian hadapan menggunakan base64. Walaupun dasar ialah kandungan parameter pengekodan dan tiada isu keselamatan, tetapi disebabkan $signature = md5($policy.'&'.$form_api_secret);, isu keselamatan yang disebutkan di atas masih akan berlaku.

Mengenai soalan kod, @PenaFong telah dijemput untuk menjawabnya.

Ty80

Tandatangan dijana dengan meminta bahagian belakang seperti yang diperlukan, dan form_api_secret akan didedahkan apabila dikira pada bahagian hadapan

给我你的怀抱

http://stackoverflow.com/questions/24443246/angularjs-how-to-upload-multipart-form-data-and-a-file
http://uncorkedstudios.com/blog/multipartformdata-file -muat naik-dengan-angularjs

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!