我有一个使用Node、Express和React的全栈应用程序。当我从VScode本地运行代码时,我的应用程序会执行所有功能,如更新到数据库、将图像上传到文件夹等。
当我构建应用程序并将构建文件夹链接到IIS时,90%的应用程序都能正常工作。唯一不起作用的功能是上传图像的能力。后端API成功,文件被上传(在build文件夹之外)到Public文件夹,但图像永远不会呈现。如果我进入开发者工具并将文件名更改为现有的图像名,它将渲染图像。这对我来说毫无意义。
结构形式:
Public/-File1.jpg(此文件在生成/启动到IIS之前就已存在)-File2.jpg(此文件是在生成/启动后通过API和中间件添加的)
(THIS工作和渲染图像)(这不工作&没有图像渲染,但它存在于文件夹中)
我有一种感觉,这与我的IIS配置有关,但我迷失了方向。
web.config文件
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlCustom="public" cacheControlMaxAge="0" />
</staticContent>
<rewrite>
<rules>
<!-- Rewrite all non-existing files and directories to the root -->
<rule name="React Routes" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/api" negate="true" /> <!-- Exclude API routes from the rewrite -->
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
字符串
server.js snip it代码(这声明了文件夹的位置--这是有效的)
const storage = multer.diskStorage({
destination: (req, file, cb) => {
const folder = determineUploadFolder(file); // Determine the folder dynamically based on the file
cb(null, '../public/img/corporate-events');
console.log('File folder destination: '+folder)
},
filename: (req, file, cb) => {
console.log(file);
const folder = determineUploadFolder(file); // Determine the folder dynamically based on the file
const filePath = path.join(`${folder}`, Date.now() + path.extname(file.originalname));
cb(null, filePath);
console.log('File name: '+ filePath)
}
});
型
我试着上传图像到builder/img,但仍然不工作。
如果我不能让这个工作,我可能只会尝试做一个反向代理,但这似乎是另一个头痛。
1条答案
按热度按时间uxh89sit1#
解决方案:
我的图像名称都是用整数值命名的,例如12345.jpg
IIS不喜欢这样,所以我在名称后面附加了字母,现在它们呈现出来了。