自問自答,結(jié)束
public LengthFieldBasedFrameDecoder(ByteOrder byteOrder, int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip, boolean failFast)
這個構(gòu)造函數(shù)可以指定大小端!
再給后臺上傳圖片路徑,可是獲取的圖片路徑一直是64位編碼的,后臺只要正常的圖片路徑
首先,這不是 base64編碼的路徑,這就是base64編碼之后的圖片實(shí)體,準(zhǔn)確的說是 base64編碼的DATA URI你通過H5的 File API拿到這一大坨DATA URI是沒問題的;
然后,"后臺只要正常的圖片路徑" 這是扯犢子,前端上傳個本地的 URL 路徑(比如c://assets/pic1.jpg)給后臺是沒有意義的,后臺需要的是你上面的那一大坨base64 URI,他需要自己decode
const fs = require('fs');
const path = require('path');
const baseStr = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKUAAAA6CAIAAABeeQ4bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MUNBNDgwNEFEQjhFMTFFNDk2QTJGNjFEQjczMjVGRjYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MUNBNDgwNDlEQjhFMTFFNDk2QTJGNjFEQjczMjVGRjYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QURGQTdDMzVEQjhEMTFFNDk2QTJGNjFEQjczMjVGRjYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QURGQTdDMzZEQjhEMTFFNDk2QTJGNjFEQjczMjVGRjYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4chVw4AAAVNklEQVR42uxdCVgT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";
function fileSaver(base64Str, filename = 'your_file_name', outputPath) {
return new Promise((resolve, reject) => {
const data = base64Str.split(',')[1];
const buff = new Buffer(data, 'base64');
const type = base64Str.match(/(?:image\/)(\w+)(?=;)/)[1];
const savePath = path.resolve(outputPath, `${filename}.${type}`);
fs.writeFile(savePath, buff, (err) => {
if (err) {
return reject(err);
}
return resolve(savePath);
})
})
}
fileSaver(baseStr, '2', './').then(
(filepath) => console.log('File saved successfully,當(dāng)前遠(yuǎn)程地址是:%s', filepath ),
(err) => console.log('File saved failed, resean : ' + err)
);涉及到j(luò)ava的參數(shù)傳遞問題。具體解釋可以參考:
https://www.zhihu.com/questio...
上面說的很詳細(xì)。關(guān)于這塊,通常給這種非基本類型增加一個包裝類處理。
public class Test {
private static class Wrapper{
int[] res;
Wrapper(int[] res){
this.res = res;
}
}
public static void main(String[] args) {
Test t = new Test();
int[] res = new int[1];
Wrapper wrapper = new Wrapper(res);
t.dfs(5, wrapper);
System.out.println(Arrays.toString(wrapper.res));
}
public void dfs(int k, Wrapper obj) {
if (k == 5) {
obj.res = new int[]{1, 2, 3, 4, 5};
return;
}
dfs(k + 1, obj);
}
} var filename = "./src/pages/scene/register/register.ejs";
//ext = /[^.]+$/.exec(filename);
ext = filename.split('.').pop();
console.log(ext);
問題一:
從文件中讀取數(shù)據(jù)的代碼可以封裝為一個單獨(dú)的方法,例如:
public static String readFileAsString(String filePath) throws IOException {
return readFileAsString(new File(filePath));
}
public static String readFileAsString(File file) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
StringBuilder content = new StringBuilder();
for (String line; (line = reader.readLine()) != null;) {
content.append(line);
}
return content.toString();
}
}
如果使用 Java8,readFileAsString 方法會更簡單:
public static String readFileAsString(File file) throws IOException {
return Files.lines(file.toPath()).collect(Collectors.joining(""));
}
這樣的話,你就不需要每次讀取某個文件的時候,都寫一堆邏輯同樣的代碼,而是直接調(diào)用 readFileAsString 方法就行。
問題二:
Java 遍歷某個目錄的 API 很多,如果只是非遞歸遍歷,即只列出當(dāng)前目錄的文件,可以使用:
File 類的 listFiles 方法Files 類的 list 方法,返回 Stream<Path>,從而可以使用 Lambda 表達(dá)式。promise.all已經(jīng)是最簡單的方法了,其他的都要手工處理全部完成這個邏輯
標(biāo)準(zhǔn)約定std::thread構(gòu)造時向函數(shù)對象傳遞實(shí)際參數(shù)的拷貝(支持移動語義),而不是轉(zhuǎn)發(fā)實(shí)際參數(shù)(你可以通過打印實(shí)際參數(shù)和形式參數(shù)的地址來檢測這一行為)。即fun的形式參數(shù)是被a的拷貝初始化的,所以形式參數(shù)a并不是main函數(shù)內(nèi)a的引用,在fun內(nèi)賦值自然不會改變main函數(shù)內(nèi)a的值。
如果你希望“以引用的方式傳參”,常用解決方案之一是使用std::ref,即std::thread(fun, std::ref(a));。
@Controller //使用該注解標(biāo)志它是一個控制器
@RequestMapping(value = "/person")
public class PersonController {
@RequestMapping(value = "/register", method = RequestMethod.POST)
public Object register(@RequestBody Person person) {
//todo
return person;
}
}
通過你給出的日志,我只能看出springboot啟動時掃描不到dao層接口
我建議你在啟動類里面加上mapper掃描注解,如@MapperScan("com.qtay.gls.dao")
onchange="this.parentNode.nextSibling.value = this.value"
不明白為什么要這個
應(yīng)該是你js代碼有問題 查看下js第二次發(fā)出的請求的url參數(shù) 還有中文url傳參數(shù) 最好使用encodeURI
建議你在java里轉(zhuǎn)換,不要把壓力交給數(shù)據(jù)庫.
箭頭函數(shù)沒有自己的this。它的this并不是像你想的那樣指向當(dāng)前子類或base對象,而是在定義的時候的當(dāng)前對象。如果你是在全局作用域下創(chuàng)建的base類,那就是undefined。
idea的話,最好是結(jié)合maven一起使用,基于maven構(gòu)建項(xiàng)目,當(dāng)你在項(xiàng)目里使用ssh框架時,idea會自動的檢測到并且提示里添加相關(guān)的框架支持。。。
google 了一晚上,終于找到了比較滿意的方法,下面是整個的 RedisCacheConfig 文件
@Configuration
public class RedisCacheConfig {
@Bean
public KeyGenerator simpleKeyGenerator() {
return (o, method, objects) -> {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(o.getClass().getSimpleName());
stringBuilder.append(".");
stringBuilder.append(method.getName());
stringBuilder.append("[");
for (Object obj : objects) {
stringBuilder.append(obj.toString());
}
stringBuilder.append("]");
return stringBuilder.toString();
};
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
return new RedisCacheManager(
RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
this.getRedisCacheConfigurationWithTtl(600), // 默認(rèn)策略,未配置的 key 會使用這個
this.getRedisCacheConfigurationMap() // 指定 key 策略
);
}
private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {
Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
redisCacheConfigurationMap.put("UserInfoList", this.getRedisCacheConfigurationWithTtl(3000));
redisCacheConfigurationMap.put("UserInfoListAnother", this.getRedisCacheConfigurationWithTtl(18000));
return redisCacheConfigurationMap;
}
private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(
RedisSerializationContext
.SerializationPair
.fromSerializer(jackson2JsonRedisSerializer)
).entryTtl(Duration.ofSeconds(seconds));
return redisCacheConfiguration;
}
}
要指定 key 的過期時間,只要在getRedisCacheConfigurationMap方法中添加就可以。
然后只需要 @Cacheable 就可以把數(shù)據(jù)存入 redis
@Cacheable(value = "UserInfoList", keyGenerator = "simpleKeyGenerator") // 3000秒
@Cacheable(value = "UserInfoListAnother", keyGenerator = "simpleKeyGenerator") // 18000秒
@Cacheable(value = "DefaultKeyTest", keyGenerator = "simpleKeyGenerator") // 600秒,未指定的key,使用默認(rèn)策略
前后端分離的話,前端獲取返回的數(shù)據(jù),根據(jù)業(yè)務(wù)(也就是你的類型)進(jìn)行跳轉(zhuǎn)
未分離的情況如果用的是balde模板,改下return view('你想跳轉(zhuǎn)的頁面的名稱')即可吧
把市和區(qū)按照children嵌套
arr.map(item => {
console.log(item);
return {
value:item.name,
label:item.name,
children: item.city.map(city => {
return {
name:city.name,
label:item.name,
children:city.area.map(area => {
return {
name: area,
label:area
}
})
}
})
}
})已解決。
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration
extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.requestMatchers()
.antMatchers("/api/**")
.and()
.authorizeRequests()
.antMatchers("/api/**")
.authenticated();
}
}解決了,原因是因?yàn)闆]在外層加<ul>....
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。