微信小プログラム画像アップロード機能(前後端コード提供)
5664 ワード
微信小プログラム画像アップロード機能(前後端コード提供)
最近、画像アップロード機能を使うプロジェクトがあるので、記録しておきます.この機能を作る前に、まず画像サーバーを配置して、これは私が配置方法を整理する時間があります.
ウィーチャットウィジェット
微信小プログラムの画像アップロードはwxを採用している.uploadFileという関数は、事前に微信ウィジェットの公式サイトでドメイン名をこの関数に追加する必要があります.また、wx.uploadFileとwx.requestの2つが同じモジュールに配置されて実装されると、同期しないという問題が発生し、2つの関数が同時に実行されます.つまり、画像アップロードのフィードバックが戻ってこないので、フォームをコミットするコードはすでに実行されています.画像がフォームにアップロードされません.したがって、コードを記述する際には、画像を選択する際に、画像をアップロードし、フィードバックされた画像情報をwxを通過することが望ましい.requestはフォームにコミットされます.
バックグラウンド処理
バックグラウンドで使用する言語はScalaで、分散ファイルシステムであるFastDFSで画像を保存したり、nginxで直接画像サーバを構成したりして、ローカルにマッピングしたりすることができます.
パスファイル
最近、画像アップロード機能を使うプロジェクトがあるので、記録しておきます.この機能を作る前に、まず画像サーバーを配置して、これは私が配置方法を整理する時間があります.
ウィーチャットウィジェット
微信小プログラムの画像アップロードはwxを採用している.uploadFileという関数は、事前に微信ウィジェットの公式サイトでドメイン名をこの関数に追加する必要があります.また、wx.uploadFileとwx.requestの2つが同じモジュールに配置されて実装されると、同期しないという問題が発生し、2つの関数が同時に実行されます.つまり、画像アップロードのフィードバックが戻ってこないので、フォームをコミットするコードはすでに実行されています.画像がフォームにアップロードされません.したがって、コードを記述する際には、画像を選択する際に、画像をアップロードし、フィードバックされた画像情報をwxを通過することが望ましい.requestはフォームにコミットされます.
//
uploadimg: function () {
var that = this;
var source = that.data.source;
wx.chooseImage({ //
count: 9, // 9
sizeType: ['original', 'compressed'], // ,
sourceType: ['album', 'camera'], // ,
success: function (res) {
//console.log(res)
//
that.setData({
source: res.tempFilePaths
})
// ,tempFilePath img src
var tempFilePaths = res.tempFilePaths
// console.log(tempFilePaths)
for (var i = 0; i < tempFilePaths.length; i++) {
if (source.length >= 9) {
that.setData({
source: source
});
return false;
} else {
var imgurllist = that.data.imgurllist;
// console.log(tempFilePaths.length)
var count = 0;
wx.uploadFile({
url: URL
filePath: tempFilePaths[i],
name: 'uploadfile_ant',
header: { "content-type": "application/json", "Cookie": "PLAY_SESSION=" + getApp().data.cookied },
success: function (res) {
count++;
var imgmessage = JSON.parse(res.data)
// console.log(imgmessage.imgurl)
if (imgmessage.state == "success") {
that.setData({
acjson: imgmessage.imgurl,
imgurllist: imgmessage.imgurl,
})
imgurllist.push(imgmessage.imgurl);
that.setData({
imgurllist: imgurllist
});
// console.log(that.data.imgurllist)
} else {
wx.hideLoading();
}
// ,
if (count == that.data.source.length) {
wx.hideToast();
}
},
fail: function (res) {
wx.hideToast();
wx.hideLoading();
wx.showModal({
title: ' ',
content: ' ',
showCancel: false,
success: function (res) {
}
})
}
});
source.push(tempFilePaths[i]);
}
that.setData({
source: source
});
}
}
})
},
//
deleteImg: function (e) {
var source = this.data.source;
var index = e.currentTarget.dataset.index;
source.splice(index, 1);
var imgurllist = this.data.imgurllist;
imgurllist.splice(index, 1);
this.setData({
source: source,
imgurllist: imgurllist
});
},
//
previewImg: function (e) {
//
var index = e.currentTarget.dataset.index;
//
var source = this.data.source;
wx.previewImage({
//
current: source[index],
//
urls: source
})
},
バックグラウンド処理
バックグラウンドで使用する言語はScalaで、分散ファイルシステムであるFastDFSで画像を保存したり、nginxで直接画像サーバを構成したりして、ローカルにマッピングしたりすることができます.
def fastdfsupload = authAction.async(parse.multipartFormData) {request =>
Future{
if(request.userInfo.map(_.id.last).getOrElse(0)!=0)
{
request.body.file("file").map { picture =>
//
val filename = picture.filename
val contentType = filename.substring(filename.lastIndexOf("."))
val furl= UUID.randomUUID.toString+contentType
picture.ref.moveTo(new File(XwConstant.setimgurl+furl),replace = true).setReadOnly()
val path1=XwConstant.httpsurl+XwConstant.getimgurl+furl
// Runtime.getRuntime.exec("chmod 777 " + path1) //
if(picture.ref.length()<1024*1024){
val pictype="#@#DSA"+picture.contentType.last
if(pictype.contains("#@#DSAimage/")){
//val backurl=FastDFS.xbUpload(picture.ref,env.rootPath().getPath+"/conf/fdfs_client.conf",picture.filename.split('.').toList.last) // ——FastDFS , nginx
if(path1!="error"){
Ok(Json.toJson(Map("state"->"success","imgurl"->path1)))
}else{
Ok(Json.toJson(Map("state"->"error1","msg"->"not found")))
}
}else{
Ok(Json.toJson(Map("state"->"imageerror","msg"->"is not image")))
}
}else{
Ok(Json.toJson(Map("state"->"error","msg"->" ")))
}
}.getOrElse(
Ok(Json.toJson(Map("state"->"error2","msg"->"p not found")))
)
}
else
Ok(Json.toJson(Map("state"->"error3","msg"->"u not found")))
}
}
パスファイル
/**
* img
*/
val setimgurl="E:/XXX/XXXX/tem/"
/**
*
*/
val getimgurl="XXXX"
/**
* URL
*/
val httpsurl=" IP "