[英]uploading image using file_picker flutter to a nodejs server
[英]AIR, URLRequest and uploading video file to NodeJS server
我在本地主機上設置了一個NodeJS服務器(用於測試),用於在上傳的視頻文件上運行FFMPEG。 這是我要上傳到的實際節點應用程序。
https://github.com/madebyhiro/codem-transcode
如果我使用以下命令在OSX控制台中運行curl作業,則實際的轉換過程將正常工作
sudo curl -d '{"source_file": "MASTER.flv","destination_file":"converted.mp4","encoder_options": "-vcodec libx264 -vb 416k -s 320x180 -y -threads 0"}' http://localhost:8080/jobs
所以我知道節點服務器運行正常。
您可以看到,特定的JSON對象是HTTP POST請求的一部分。 (在下面的AIR客戶端代碼示例中,這是我故意留空的params對象。)
在客戶端,我正在使用AIR for Desktop應用程序來簡單地上傳視頻文件。
許多問題
一個主要的問題僅僅是您不能將同一台計算機上的文件上傳到本地服務器嗎?
我的requestHeaders是否缺少某些內容?
我非常賞心悅目,但前提是必須正確回答所有上述所有問題,並且優先選擇帶有參考文獻或代碼示例的答案。 這是另一個相關問題,提供了一些有用的信息, 使用URLRequest上傳POST文件
這是相關的上傳代碼。 str是我要上傳的實際視頻文件的nativePath。 如前所述,JSON params Object故意留為空白,因此需要正確的格式才能正常工作。
function uploadFile(str:String):void {
var params:Object={}
var jsonOb:String = JSON.stringify(params);
var hdr:URLRequestHeader = new URLRequestHeader("Content-type", "application/json");
var request:URLRequest=new URLRequest("http://localhost:8080");
request.requestHeaders.push(hdr);
request.method=URLRequestMethod.POST;
request.useCache=false;
request.cacheResponse=false;
//pass urlVariables instead of JSON Object??
request.data=jsonOb;
var file:File=new File();
configureListeners(file);
file.url='file:///'+str;
try {
file.upload(request);
} catch (e:Error) {
trace('error', e);
}
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(ProgressEvent.PROGRESS, uploadProgressHandler, false, 0, false);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, httpResponseHandler, false, 0, false);
dispatcher.addEventListener(Event.COMPLETE, uploadCompleteHandler, false, 0, true);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler, false, 0, true);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler, false, 0, true);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler, false, 0, true);
}
這是我測試過的代碼,可以在這里工作:
動作代碼 :(還添加了UPLOAD_COMPLETE_DATA偵聽器,以在上傳時獲得nodejs響應)
uploadFile("/Users/wouter/test.jpg");
private function uploadFile(str:String):void {
//additional data needs to be a URLVariables instance
var data:URLVariables = new URLVariables();
data.origFile = str;
//no use, upload will reset headers
//var hdr:URLRequestHeader = new URLRequestHeader("Content-type", "application/json");
var request:URLRequest=new URLRequest("http://localhost:8080");
//request.requestHeaders.push(hdr);
request.method=URLRequestMethod.POST;
request.useCache=false;
request.cacheResponse=false;
//pass urlVariables instead of JSON Object??
request.data=data;
var file:File=new File();
configureListeners(file);
file.url='file:///'+str;
try {
file.upload(request);
} catch (e:Error) {
trace('error', e);
}
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(ProgressEvent.PROGRESS, uploadProgressHandler, false, 0, false);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, httpResponseHandler, false, 0, false);
dispatcher.addEventListener(Event.COMPLETE, uploadCompleteHandler, false, 0, true);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler, false, 0, true);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler, false, 0, true);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler, false, 0, true);
//add a UPLOAD_COMPLETE_DATA event to process server response
dispatcher.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadDataComplete, false, 0, true);
}
NodeJS服務器 (使用express 4.0和multer 0.1.7處理文件上傳):
var express = require('express'),
multer = require('multer');
var app = express();
//auto save file to uploads folder
app.use(multer({ dest: './uploads/'}))
app.post('/', function (req, res) {
console.log(req.body); //contains the variables
console.log(req.files); //contains the file references
res.send('Thank you for uploading!');
});
app.listen(8080);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.