上传图片 ionic 3
upload image ionic 3
我正在用 ionic 3 开发应用程序,需要使用在 lumen 框架中创建的 api 将图像上传到服务器。
上传图片的请求是:
图像是从相机中点击并转换为 base64。
let base64Image = 'data:image/jpeg;base64,' + imageData;
然后我用FileUpload上传图片
import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer';
buildHeadersDeals(){
this.header = new Headers();
this.header.append('Authorization', 'Basic '
+btoa("test:test"));
}
uploadPhoto(image, token) {
this.buildHeadersDeals();
url = 'http://192.168.2.12/api/upload?token="+token;
const fileTransfer: FileTransferObject = this.transfer.create();
let options: FileUploadOptions = {
fileKey: 'photo',
fileName: image.substr(image.lastIndexOf('/')+1),
chunkedMode: true,
mimeType: "image/jpeg",
headers: this.header,
}
return fileTransfer.upload(image, encodeURI(url), options)
.then((data) => {
console.log(data);
return data;
}, (err) => {
console.log(err);
});
}
我的 api 结尾是:
public function upload(Request $request) {
if ($request->hasFile('photo')) {
$image = $request->file('photo');
$response['image'] = $image;
return response()->json($response,200);
}
}
我有两个问题:
1) 我总是将照片设为 null ($request->file('photo'))
2) 有人可以告诉我将令牌作为参数发送吗,下面的代码不起作用:
let options: FileUploadOptions = {
fileKey: 'photo',
fileName: image.substr(image.lastIndexOf('/')+1),
chunkedMode: true,
mimeType: "image/jpeg",
headers: this.header,
params: {
'token': 'sffsdhnzchvh'
}
}
谢谢
我已经安装 "cordova-plugin-camera" : "^4.0.2" 和 "cordova-plugin-file": "^6.0.1"
此处调用函数->
this.selectImage(this.camera.PictureSourceType.CAMERA);
selectImage(selection: any) {
var options: any;
options = {
quality: 75,
destinationType: this.camera.DestinationType.DATA_URL,
sourceType: selection,
allowEdit: true,
encodingType: this.camera.EncodingType.JPEG,
saveToPhotoAlbum: false
};
this.camera.getPicture(options).then((imgUrl) => {
if (options.destinationType == this.camera.DestinationType.FILE_URI) {
console.log(imgUrl,'if');
var sourceDirectory = imgUrl.substring(0, imgUrl.lastIndexOf('/') + 1);
var sourceFileName = imgUrl.substring(imgUrl.lastIndexOf('/') + 1, imgUrl.length);
sourceFileName = sourceFileName.split('?').shift();
this.File.copyFile(sourceDirectory, sourceFileName, cordova.file.externalApplicationStorageDirectory, sourceFileName).then((result: any) => {
this.imageNewPath = result.nativeURL;
// do api call here
}, (err) => {
console.log(JSON.stringify(err));
})
}
else {
console.log(imgUrl,'else');
this.imageNewPath = "data:image/jpeg;base64," + imgUrl;
//do here
}
}, (err) => {
console.log("Error in choosing image :" + JSON.stringify(err));
});
}
我正在用 ionic 3 开发应用程序,需要使用在 lumen 框架中创建的 api 将图像上传到服务器。 上传图片的请求是: 图像是从相机中点击并转换为 base64。
let base64Image = 'data:image/jpeg;base64,' + imageData;
然后我用FileUpload上传图片
import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer';
buildHeadersDeals(){
this.header = new Headers();
this.header.append('Authorization', 'Basic '
+btoa("test:test"));
}
uploadPhoto(image, token) {
this.buildHeadersDeals();
url = 'http://192.168.2.12/api/upload?token="+token;
const fileTransfer: FileTransferObject = this.transfer.create();
let options: FileUploadOptions = {
fileKey: 'photo',
fileName: image.substr(image.lastIndexOf('/')+1),
chunkedMode: true,
mimeType: "image/jpeg",
headers: this.header,
}
return fileTransfer.upload(image, encodeURI(url), options)
.then((data) => {
console.log(data);
return data;
}, (err) => {
console.log(err);
});
}
我的 api 结尾是:
public function upload(Request $request) {
if ($request->hasFile('photo')) {
$image = $request->file('photo');
$response['image'] = $image;
return response()->json($response,200);
}
}
我有两个问题:
1) 我总是将照片设为 null ($request->file('photo'))
2) 有人可以告诉我将令牌作为参数发送吗,下面的代码不起作用:
let options: FileUploadOptions = {
fileKey: 'photo',
fileName: image.substr(image.lastIndexOf('/')+1),
chunkedMode: true,
mimeType: "image/jpeg",
headers: this.header,
params: {
'token': 'sffsdhnzchvh'
}
}
谢谢
我已经安装 "cordova-plugin-camera" : "^4.0.2" 和 "cordova-plugin-file": "^6.0.1"
此处调用函数->
this.selectImage(this.camera.PictureSourceType.CAMERA);
selectImage(selection: any) {
var options: any;
options = {
quality: 75,
destinationType: this.camera.DestinationType.DATA_URL,
sourceType: selection,
allowEdit: true,
encodingType: this.camera.EncodingType.JPEG,
saveToPhotoAlbum: false
};
this.camera.getPicture(options).then((imgUrl) => {
if (options.destinationType == this.camera.DestinationType.FILE_URI) {
console.log(imgUrl,'if');
var sourceDirectory = imgUrl.substring(0, imgUrl.lastIndexOf('/') + 1);
var sourceFileName = imgUrl.substring(imgUrl.lastIndexOf('/') + 1, imgUrl.length);
sourceFileName = sourceFileName.split('?').shift();
this.File.copyFile(sourceDirectory, sourceFileName, cordova.file.externalApplicationStorageDirectory, sourceFileName).then((result: any) => {
this.imageNewPath = result.nativeURL;
// do api call here
}, (err) => {
console.log(JSON.stringify(err));
})
}
else {
console.log(imgUrl,'else');
this.imageNewPath = "data:image/jpeg;base64," + imgUrl;
//do here
}
}, (err) => {
console.log("Error in choosing image :" + JSON.stringify(err));
});
}