Appcelerator Titanium上传到谷歌驱动器 - Javascript中的Rest API - 错误404 [英] Appcelerator Titanium upload to google drive - Rest API in Javascript - Error 404
问题描述
我正在尝试使用 appcelerator 钛将图像上传到谷歌驱动器.我有 OAuth 并且我有一个有效的 access_token.
Im trying to upload an image to google drive using appcelerator titanium. I have got OAuth and i have an access_token which is valid.
不幸的是,当我尝试上传图片时,出现 404 http 错误.
Unfortunately when i try and upload the image i get a 404 http error.
function Upload(blob){
Titanium.API.info(googleAuth.getAccessToken());
const boundary = '-------314159265358979323846';
const delimiter = "\r\n--" + boundary + "\r\n";
const close_delim = "\r\n--" + boundary + "--";
var request = Ti.Network.createHTTPClient({
onload : function(e) {
alert(this.requestText); },
onerror : function(e) {
Titanium.UI.createAlertDialog({
title : 'Error',
message : 'unable to upload' + JSON.stringify(e)
}).show();
},
timeout : 60000
});
var metadata = {
'title' : "image1.png",
'mimeType': 'application/json',
};
var mediaRequestBody =
delimiter +
'Content-Type: application/json\r\n\r\n' +
JSON.stringify(metadata) +
delimiter +
blob +
close_delim;
var uploadRequest = {
'headers': {
'Content-Type': 'multipart/mixed; boundary="' + boundary + '"',
'access_token' : googleAuth.getAccessToken()
},
'body': mediaRequestBody};
var url = 'https://www.googleapis.com/upload/drivev2/files?uploadType=multipart';
request.open("POST", url);
request.send(uploadRequest);
}
我通过的Blob"是通过以下方式检索的:
The 'Blob' i pass through is retrieved by doing:
var f = Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory,filename);
f.write(image);
var url = f.nativePath;
var blob = f.read();
我认为很接近,但这可能是我的 http 请求.
I think close but it's probably my http request.
谢谢.
推荐答案
我以前也遇到过同样类型的问题,以下是我解决它的方法.
I was also facing the same type of issue sometime back and following is how I was able to solve it.
考虑到我有:
blob
我必须上传的图像.- 访问令牌是 google api 所需的.
- 我使用的范围是:
blob
of the image which I have to upload.- Access token required for the google api's.
- Scope which I used is :
- https://www.googleapis.com/auth/drive
- https://www.googleapis.com/auth/drive.appdata
- https://www.googleapis.com/auth/drive.file
步骤 1: 将 blob 图像转换为 base64 编码的字符串.
Step 1: Convert blob image to base64 encoded string.
var base64image = Ti.Utils.base64encode(blobData);
第 2 步:创建请求正文以将图像上传到驱动器.
Step 2: Create the request body to upload image to drive.
var reqBody = '--foo_bar_baz\nContent-Type: application/json; charset=UTF-8\n\n{"title": "' + myFileName + '"}\n--foo_bar_baz\nContent-Type: image/jpeg\nContent-Transfer-Encoding: base64\n\n' + base64image + '\n--foo_bar_baz--';
第 3 步:为请求设置必要的标头.
Step 3: Set the necessary headers for the request.
client.setRequestHeader('Authorization', "Bearer " + myAccessToken);
client.setRequestHeader('Content-Type', 'multipart/related; boundary="foo_bar_baz"' );
基本片段:
function upLoadFile(myAccessToken) {
var base64image = Ti.Utils.base64encode(blobData); //convert blob to base64 encoded string
var myFileName = "MyImage.png";
var reqBody = '--foo_bar_baz\nContent-Type: application/json; charset=UTF-8\n\n{"title": "' + myFileName + '"}\n--foo_bar_baz\nContent-Type: image/jpeg\nContent-Transfer-Encoding: base64\n\n' + base64image + '\n--foo_bar_baz--';
var url = "https://www.googleapis.com/upload/drive/v2/files";
var client = Ti.Network.createHTTPClient({
onload : function(e) {
Ti.API.info("Received text: " + this.responseText);
alert('success');
},
onerror : function(e) {
Ti.API.debug(e.error);
alert('error');
},
timeout : 100000000
});
client.open("POST", url);
client.setRequestHeader('Authorization', "Bearer " + myAccessToken);
client.setRequestHeader('Content-Type', 'multipart/related; boundary="foo_bar_baz"' );
client.send(reqBody);
}
PS:此答案使用 Drive API v2,另请参阅管理上传上的云端硬盘文档.
P.S : This answer uses Drive API v2, also see Drive docs on Manage Upload.
希望对您有所帮助.
这篇关于Appcelerator Titanium上传到谷歌驱动器 - Javascript中的Rest API - 错误404的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!